web-dev-qa-db-fra.com

La valeur de hachage MD5 est différente de Bash et PHP

J'ai essayé de générer le MD5 sum (en utilisant md5sum) d'une chaîne, "hello". J'ai essayé différentes méthodes telles que l'outil md5sum sous Linux, la fonction MD5 () de PHP ainsi que divers traducteurs de texte en ligne en md5sum.

echo "hello" | md5sum

et

echo "hello" > file && md5sum file

Donne le résultat b1946ac92492d2347c6235b4d2611184. Cependant, la fonction md5 () de PHP et presque tous les générateurs en ligne ont donné la sortie 5D41402ABC4B2A76B9719D911017C592.

Quelle est la raison?

60
Himanshu Shekhar

Par défaut, echo inclut un caractère de nouvelle ligne à la fin de la sortie. Cependant, PHP et les sites en ligne que vous avez utilisés n'incluent pas la nouvelle ligne. Pour supprimer le caractère de nouvelle ligne, utilisez l'indicateur -n:

echo -n "hello" | md5sum

Sortie:

 5d41402abc4b2a76b9719d911017c592 - 

Voir: help echo


ou avec printf:

printf "%s" "hello" | md5sum
79
Cyrus

@ La réponse de Cyrus est exactement sur le point de la façon de résoudre ce - pour expliquer, lors de l'utilisation echo il affichera une nouvelle ligne à la fin de la chaîne. Comme vous pouvez le voir sur cette sortie en ligne, hello avec sorties exactement la nouvelle ligne MD5 que vous obtenez précédemment. L'utilisation -n supprime le saut de ligne, et vous donner le résultat que vous attendiez.

 enter image description here

Edition :

Vous pouvez le voir clairement si vous émettez à hexdump, qui montre l'hexadécimal des octets là-bas.

$ echo "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65 0a              |str_example.|

Voir la 0a (\n) à la fin de la chaîne

$ echo -n "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65                 |str_example|

Avec -n écho ne met pas une nouvelle ligne (\n) à la fin

Maintenant avec une chaîne vide

$ echo  "" | hd
00000000  0a                                                |.|

Juste le personnage de la nouvelle ligne

$ echo -n  "" | hd

Chaîne vide, montre donc hexdump pas de sortie

100
Jonno