2009-12-03 79 views
6

我很困惑,为什么以下返回单独sHA1s为什么Perl和/ bin/sha1会给出不同的结果?

$ 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 - 

哪一个是正确的?我/我/做错了吗?

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

你可以看到摘要是正确的继任者(Digest::SHA

+2

在这种情况下,总是看串你给他们下一步之前,以确保他们都在你面前一样的东西做摘要。如果必须的话,将它保存到一个文件并进行十六进制转储。 – 2009-12-04 00:37:25

回答

19

两者都是正确的。你的echo命令在最后包含一个换行符。 (和perl字符串不)与echo -n ...

3

这是一个这样的一个频繁的错误,我做了很多次。 echo命令也返回换行符。

+1

echo不是“返回”换行符。它正在输出一个换行符,并且(可能)返回0。 – 2009-12-07 15:48:18

9

Perl给你输入的文字串的散列,而echo则附加一个换行符。如果你告诉echo不添加一个新行,你会得到相同的结果:

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