Cette question a déjà une réponse ici:
J'ai essayé de générer la somme MD5 (à l'aide de 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
A donné le résultat b1946ac92492d2347c6235b4d2611184
. Cependant, la fonction PHP md5 () et presque tous les générateurs en ligne ont donné le résultat 5D41402ABC4B2A76B9719D911017C592
.
Quelle est la raison?
Réponses:
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 le-n
drapeau:Sortie:
Voir:
help echo
ou avec printf:
la source
echo -n
pourrait écho-n
si leur Linux utilise une Busybox dépouillée.@ Cyrus répond exactement à la question de savoir comment résoudre ce problème - pour expliquer, son utilisation
echo
générera une nouvelle ligne à la fin de la chaîne. Comme vous pouvez le constater sur cette sortie en ligne,hello
avec une nouvelle ligne, vous obtenez exactement le MD5 que vous obteniez auparavant. L'utilisation-n
supprime la nouvelle ligne et vous donnera ensuite le résultat attendu.Modifier :
Vous pouvez le voir clairement si vous le sortez
hexdump
, ce qui indique l'hexadécimal des octets.Voir le
0a
(\n
) à la fin de la chaîneAvec
-n
echo ne met pas une nouvelle ligne (\n
) à la finMaintenant avec une chaîne vide
Juste le personnage de la nouvelle ligne
Chaîne vide,
hexdump
ne montre donc pas de sortiela source
echo hello
etecho -n hello
àhexdump -C
respectivement;)echo -n
, car il est non standard et pris en charge de manière incohérente (voir lesecho
Spécifications Single Unix pour et un catalogue plus détaillé des incompatibilités de Sven Mascheck ). Si vous voulez que cela fonctionne de manière cohérente, utilisezprintf
plutôt; son utilisation est un peu plus complexe (vous devez spécifier une chaîne de format en plus des données que vous voulez imprimer), mais IMO en vaut la peine pour éviter tout problème. Dans ce cas,printf "%s" "hello"
fera l'affaire.