2012-01-17 17 views
7

Perché l'hash di openssl è diverso da quelli che ottengo in python?L'hash SHA1 differisce tra openssl e hashlib/pycrypto

$ echo "Lorem ipsum" | openssl dgst -sha1 -hex 
(stdin)= d0c05753484098c61e86f402a2875e68992b5ca3 
$ python 
>>> from hashlib import sha1 
>>> sha("Lorem ipsum").hexdigest() 
'94912be8b3fb47d4161ea50e5948c6296af6ca05' 
>>> from Crypto.Hash import SHA 
>>> SHA.new("Lorem ipsum").hexdigest() 
'94912be8b3fb47d4161ea50e5948c6296af6ca05' 

Le stringhe non sono equivalenti? mi manca qualcosa di ovvio?

Modifica: Grazie per individuarlo. Era in grado di convogliare un messaggio salvato da un file che ha anche lo stesso fastidioso problema di nuova riga.

$ cat message | openssl dgst -sha1 -hex 
'keep whacking your head mate, it wont be the same' 
$ echo -n $(cat message) | openssl dgst -sha1 -hex 
'ok, you got me, for now' 
+0

Comune, sì, ovvio, non proprio. – Piskvor

risposta

24

Stai perdendo la linea di fondo campo che echo aggiungerà per impostazione predefinita:

echo "Lorem ipsum" | openssl dgst -sha1 -hex 
(stdin)= d0c05753484098c61e86f402a2875e68992b5ca3 

Con il parametro -n, verrà echo solo la stringa che gli hai dato, per il risultato previsto:

echo -n "Lorem ipsum" | openssl dgst -sha1 -hex 
(stdin)= 94912be8b3fb47d4161ea50e5948c6296af6ca05 
6

eco sta mettendo una nuova riga alla fine della stringa

>>> sha("Lorem ipsum\n").hexdigest() 
'd0c05753484098c61e86f402a2875e68992b5ca3' 
1

echo aggiunge un carattere di fine riga alla stringa. L'opzione -n ​​sopprime la newline di coda:

> echo -n "Lorem ipsum" | openssl dgst -sha1 -hex 
94912be8b3fb47d4161ea50e5948c6296af6ca05