Python hashlib与sha512sum工具的SHA512差异

9 投票
3 回答
5354 浏览
提问于 2025-04-15 12:59

我在使用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'

这两个工具都应该对字符串"test"计算消息摘要,为什么我会得到不同的结果呢?

3 个回答

2

不同的输入会产生不同的输出。试着把相似的东西进行比较:

C:\junk>echo test| python -c "import sys, hashlib; x = sys.stdin.read(); print len(x), repr(x); print hashlib.sha512(x).hexdigest()"
5 'test\n'
0e3e75234abc68f4378a86b3f4b32a198ba301845b0cd6e50106e874345700cc6663a86c1ea125dc5e92be17c98f9a0f85ca9d5f595db2012f7cc3571945c123
11

echo 命令会在输出后面加一个换行符:

$ python -c 'import hashlib; print hashlib.sha512("test\n").hexdigest()'
0e3e75234abc68f4378a86b3f4b32a198ba301845b0cd6e50106e874345700cc6663a86c1ea125dc5e92be17c98f9a0f85ca9d5f595db2012f7cc3571945c123

如果你不想要这个换行符,可以使用 echo -n

22

我觉得区别在于,echo 会在输出的内容后面加一个换行符。你可以试试这个命令:echo -n test | sha512sum。

撰写回答