must - sha1 python
SHa1 hash difieren entre openssl y hashlib/pycrypto (3)
¿Por qué el hash de usar openssl difiere de los que obtengo en python?
$ 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''
¿Las cadenas no son equivalentes? ¿Me estoy perdiendo algo obvio?
Editar: Gracias por detectarlo. 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''
Te falta la línea final que echo
agregará por defecto:
echo "Lorem ipsum" | openssl dgst -sha1 -hex
(stdin)= d0c05753484098c61e86f402a2875e68992b5ca3
Con el parámetro -n
, se repetirá solo la cadena que le diste, para el resultado esperado:
echo -n "Lorem ipsum" | openssl dgst -sha1 -hex
(stdin)= 94912be8b3fb47d4161ea50e5948c6296af6ca05
echo está poniendo una nueva línea al final de la cadena
>>> sha("Lorem ipsum/n").hexdigest()
''d0c05753484098c61e86f402a2875e68992b5ca3''
echo
agrega un carácter de nueva línea a la cadena. La opción -n suprime la nueva línea de cola:
> echo -n "Lorem ipsum" | openssl dgst -sha1 -hex
94912be8b3fb47d4161ea50e5948c6296af6ca05