2009-12-03 8 views
6

Je suis confus pour expliquer pourquoi les sHA1s séparés retour suivantsPourquoi Perl et/bin/sha1 donnent des résultats différents?

$ perl -MDigest::SHA1 -E'say Digest::SHA1::sha1_hex("http://i.aultec.com/v/8066/Originals/1FTVX12585NA9832010.jpg");' 
e1133fa3b7ea0bfb8ffa4d877932ed6c6fa10cef 

$ echo "http://i.aultec.com/v/8066/Originals/1FTVX12585NA9832010.jpg" | sha1sum 
5c3731e83ae0184ed93b595b9f5604863dd331e6 - 

Lequel a raison? Suis-je/je le fais mal?

$ perl -MDigest::SHA -E'say Digest::SHA::sha1_hex("http://i.aultec.com/v/8066/Originals/1FTVX12585NA9832010.jpg");' 
e1133fa3b7ea0bfb8ffa4d877932ed6c6fa10cef 

Vous pouvez voir le résumé est juste le successeur (Digest::SHA)

+2

Dans ces cas, regardez toujours les cordes avant de les donner à l'étape suivante pour vous assurer qu'ils sont la même chose avant fais le résumé. Enregistrez-le dans un fichier et hexdump si vous devez. –

Répondre

19

Les deux ont raison. Votre commande echo inclut une nouvelle ligne à la fin. (et la chaîne perl ne fonctionne pas) Essayez avec echo -n ...

3

Ceci est une erreur si fréquente et je l'ai fait de nombreuses fois. La commande echo renvoie également une nouvelle ligne.

+1

echo ne "renvoie" pas de nouvelle ligne. Il sort un retour à la ligne, et retourne (probablement) 0. –

9

Perl vous donne le hachage de la chaîne littérale que vous avez entrée, alors que echo ajoute un retour à la ligne. Si vous dites echo de ne pas ajouter une nouvelle ligne, vous obtiendrez le même résultat:

drewfus:~$ perl -MDigest::SHA1 -E'say Digest::SHA1::sha1_hex("foo");' 
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 
drewfus:~$ echo -n "foo" | sha1sum 
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 -