2014-10-18 86 views
0

我是使用OpenSSL庫的新手,我無法得到它的輸出來匹配Python的加密庫的輸出。下面是一個例子。OpenSSL不匹配Python hashlib

Python代碼:

import hmac 

secret = "asdf1234" 
string = '{"request"}' 

hmac.new(secret, string, hashlib.sha384).hexdigest() 
    '92904f1b3c210a4fb19f476c19f24452717e85329aa9ffaba4a5fbe1111c2e3fa7f5a5fb35fdc58b3d158f5f886c3d02' 

的OpenSSL:

echo -n {"request"} | openssl dgst -sha384 -hmac asdf1234 -hex 

(stdin)= 4c3d525b8a7095b9063a3bd974e56f0a5872399365912297d6ee18e400d2b55d0142395ba5fb4f33655ceca209ba9570 

我在做什麼錯?要麼執行正確?

回答

1

要匹配openssl輸出,Python字符串應該是'{request}'而不是'{"request"}'

import hmac 
import hashlib 
secret = "asdf1234" 
string = '{request}' 

hmac.new(secret, string, hashlib.sha384).hexdigest() 

產生

'4c3d525b8a7095b9063a3bd974e56f0a5872399365912297d6ee18e400d2b55d0142395ba5fb4f33655ceca209ba9570' 

或者,如果你想OpenSSL的命令相匹配的Python的輸出,使用

echo -n '{"request"}' | openssl dgst -sha384 -hmac asdf1234 -hex 

這將產生

(stdin)= 92904f1b3c210a4fb19f476c19f24452717e85329aa9ffaba4a5fbe1111c2e3fa7f5a5fb35fdc58b3d158f5f886c3d02 

畢竟,輸入具有以匹配輸出以在匹配有機會:

% echo -n {"request"} 
{request} 

>>> print('{"request"}') 
{"request"}