RC4 ne fonctionne pas correctement avec la commande OpenSSL?
-
27-10-2019 - |
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!
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.