openssl和hashlib/pycrypto之间的SHA1哈希不同



为什么使用openssl得到的哈希与我在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'

这些字符串不等价吗?我是不是错过了什么显而易见的东西?

编辑:感谢您发现它。是从一个文件中发送一条保存的消息吗?该文件也存在同样令人讨厌的换行问题。

$ 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' 

您缺少默认情况下echo将附加的尾行:

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

使用-n参数,它将只回显您给它的字符串,以获得预期结果:

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

echo在字符串的末尾放一个换行符

>>> sha("Lorem ipsumn").hexdigest()
'd0c05753484098c61e86f402a2875e68992b5ca3'

echo向字符串中添加换行符。选项-n抑制尾随换行符:

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

相关内容

  • 没有找到相关文章

最新更新