Question

Je dois coder le résultat d'une exécution avec RC4. Avant de faire le script bash, je teste comment crypte les données.

J'utilise la commande suivante:

echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad | xxd

Et la sortie est:

0000000: bdb1 7f03                                ....

Si j'essaie de faire la même chose avec cet encodeur en ligne RC4 http: //www.fyneworks.com/encryption/rc4-encryption/index.asp la sortie est la suivante: DA EA 54 65

Une autre sortie, avec les mêmes données et même clé ?? Données: touche "test": "test"

Aussi j'ai vérifié avec un petit programme que j'ai codé en C, et la sortie est le même que le codeur en ligne ... donc, la question est, ce que je fais mal avec la commande OpenSSL ??

Merci!

Était-ce utile?

La solution

RC4 a des touches de longueur variable, et les forces utilitaires enc OpenSSL vous de choisir une taille de clé. Ces autres implémentations que vous testez contre faire une telle restriction, de sorte que vos clés ne correspondent pas.

La documentation pour l'utilitaire enc décrit les tailles de clés autorisées pour le chiffrement:

    rc4                128 bit RC4
    rc4-64             64 bit RC4
    rc4-40             40 bit RC4

Alors RC4 ne fonctionne que sur une clé de 128 bits (16 octets). En outre, les moyens d'option de -k pour dériver une clé de la passphrase donnée. Elle le fait en interne en utilisant la fonction EVP_BytesToKey de, qui met en œuvre un. Dérivation des touches de fonction (KDF)

Quoi qu'il en soit, longue histoire courte, vos implémentations RC4 n'utilisent pas la même clé. Utilisez l'option -p pour avoir OpenSSL imprimer la clé réelle qu'il utilise:

$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p
key=098F6BCD4621D373CADE4E832627B4F6

De plus, puisqu'il est attend les clés de 16 octets, il va clés plus courtes pad zéro, même si vous spécifiez une touche de raccourci avec l'option -K (majuscule K). Vous pouvez utiliser xxd pour trouver les valeurs hexadécimaux ascii de « test » et -p à nouveau pour voir la clé de OpenSSL:

$ echo -ne "test" | xxd
0000000: 7465 7374                                test
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p
key=74657374000000000000000000000000

Vous devez donc correspondre à des longueurs de clé et spécifiez une valeur-clé hexagonale avec l'option -K et vous verrez les implémentations RC4 sont équivalentes. Par exemple, j'utilise ici RC-40 pour limiter la longueur de clé à 5 octets et utiliser les « tests » clés 5 octets, ou 74 65 73 74 73.

$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd
0000000: dd9b 5cb9   

Vous verrez que votre implémentation Web obtient le même résultat quand étant donné les « tests » clés.

scroll top