2012-01-17 12 views
7

¿Por qué el hash de usar openssl difiere de los que obtengo en python?hash SHA1 difieren entre openssl y 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' 

son las cadenas no son equivalentes? ¿Me estoy perdiendo algo obvio?

Edit: Gracias por verlo. Estaba canalizando un mensaje guardado de un archivo que también sufre el mismo problema molesto de la nueva línea.

$ 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

Común, sí, obvio, no realmente. – Piskvor

Respuesta

24

Te estás perdiendo la línea de fondo que echo añadirá de forma predeterminada:

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

Con el parámetro -n, se hará eco de solo la cadena que le diste, para el resultado esperado:

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

eco está poniendo una nueva línea al final de la cadena

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

echo agrega un carácter de nueva línea a la cadena. La opción -n suprime la nueva línea de asimetría:

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