2009-07-18 17 views
5

我從linux的'sha512sum'工具和python hashlib庫獲得不同的消息摘要。在python hashlib和sha512sum工具之間的SHA512差異

下面是我得到我的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' 

兩者都應計算字符串「測試」的消息摘要,你覺得我得到不同的結果,爲什麼?

回答

16

我認爲區別在於echo會在其輸出中添加一個換行符。 試試echo -n test | sha512sum

10

echo是添加一個新行:

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

爲了避免這種情況,使用echo -n

2

不同的輸入,不同的輸出。嘗試與like一樣比較:

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