我从linux的'sha512sum'工具和python hashlib库中获得了不同的消息摘要.
这是我在Ubuntu 8.10上得到的:
$ echo test | sha512sum
0e3e75234abc68f4378a86b3f4b32a198ba301845b0cd6e50106e874345700cc6663a86c1ea125dc5e92be17c98f9a0f85ca9d5f595db2012f7cc3571945c123 -
$ python
Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import hashlib
>>> hashlib.sha512("test").hexdigest()
'ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff'
Run Code Online (Sandbox Code Playgroud)
两者都应该计算字符串"test"的消息摘要,为什么你认为我得到的结果不同?
我很困惑为什么以下返回单独的sHA1s
$ 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 -
Run Code Online (Sandbox Code Playgroud)
哪一个是对的?我/我/做错了吗?
$ perl -MDigest::SHA -E'say Digest::SHA::sha1_hex("http://i.aultec.com/v/8066/Originals/1FTVX12585NA9832010.jpg");'
e1133fa3b7ea0bfb8ffa4d877932ed6c6fa10cef
Run Code Online (Sandbox Code Playgroud)
你可以看到摘要是正确的继承者(Digest::SHA)
好吧,我有两个文件.他们是完全相同的.
第一个文件是:
http://iadsonline.com/servconfig.php
第二个文件是:
http://xzerox.info/servconfig.php
但是,当我使用md5_file()来获取他们的MD5时,他们会返回两个不同的MD5.
第一个返回cc7819055cde3194bb3b136bad5cf58d,这是不正确的,第二个返回96a0cec80eb773687ca28840ecc67ca1,这是正确的.
该文件只是一个
为了验证,我使用了这段代码:
$contents = file_get_contents($URL);
echo htmlentities($contents);
Run Code Online (Sandbox Code Playgroud)
他们都回来了
那么为什么它们以不同的方式散列呢?
根据维基百科,空字符串的md5总和是d41d8cd98f00b204e9800998ecf8427e
我用我的md5库证实了这一点
但是,当我跑
echo "" | md5sum
Run Code Online (Sandbox Code Playgroud)
在我的linux shell中,我得到68b329da9893e34099c7d8ad5cb9c940 -
实际上,我的所有哈希都没有匹配md5sum命令的输出.
有关这种差异的任何想法?
我创建了一个包含一个单词的文件a.txt - 'dog'.
这是一个MD5校验和:
$md5sum a.txt
c52605f607459b2b80e0395a8976234d a.txt
Run Code Online (Sandbox Code Playgroud)
这是单词dog的MD5校验和:
$perl -e "use Digest::MD5 qw(md5_base64 md5_hex); print(md5_hex('dog'));"
06d80eb0c50b49a509b49f2424e8c805
Run Code Online (Sandbox Code Playgroud)
为什么校验和不同?
谢谢,
马丁