62 votes

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

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

echo "hello" | md5sum

y

echo "hello" > file && md5sum file

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

Quelle en est la raison ?

100voto

Jonno Points 20324

La réponse de @Cyrus est exactement ce qu'il faut faire pour résoudre ce problème. echo il affichera une nouvelle ligne à la fin de la chaîne. Comme vous pouvez le voir sur cette sortie en ligne, hello avec une nouvelle ligne produit exactement le MD5 que vous obteniez précédemment. Utilisation de -n supprime la nouvelle ligne, et vous donnera alors le résultat attendu.

enter image description here

Modifier :

Vous pouvez le voir clairement si vous l'envoyez en sortie à hexdump qui montre l'hexadécimal des octets.

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

Voir le 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 echo ne met pas une nouvelle ligne ( \n ) à la fin

Maintenant avec une chaîne vide

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

Juste le personnage de New Line

$ echo -n  "" | hd

Chaîne vide, donc hexdump ne montre aucune sortie

84voto

Rachel Blackman Points 81

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'option -n drapeau :

echo -n "hello" | md5sum

Sortie :

5d41402abc4b2a76b9719d911017c592  -

Voir : help echo


ou avec printf :

printf "%s" "hello" | md5sum

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X