pysha3 没有给出正确答案
pysha3 not giving the right answer
用下面的代码,
# $ pip install pysha3
import sys
if sys.version_info < (3, 4):
import sha3
import hashlib
s = hashlib.new("sha3_512")
s.update(b"")
print(s.hexdigest())
我得到
0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e
而不是
a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
比照。 https://en.wikipedia.org/wiki/SHA-3#Examples_of_SHA-3_variants
谁能告诉我吗?
您找到的 pysha3 模块基于 SHA-3 规范的草案,在它被标准化之前。
该模块是作为 Python issue 16113 的 POC 创建的,代码自 2012 年以来未更新。NIST 标准直到 2015 年 10 月才最终确定。因此,无法使用该实现如果您希望它遵循已发布的标准。
该票据链接到一个声称已更新为标准的实现:https://github.com/bjornedstrom/python-sha3。该软件包似乎没有在 PyPI 上列出,但可以直接从 GitHub:
使用 pip 安装
pip install git+https://github.com/bjornedstrom/python-sha3
并且这个包确实产生了预期的结果:
>>> import hashlib
>>> import sha3
>>> hashlib.sha3_512(b'').hexdigest()
b'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'
这个包没有修补内置的 hashlib.new()
构造函数,但是通过将构造函数插入模块缓存可以很容易地做到这一点:
>>> hashlib.__builtin_constructor_cache['sha3_512'] = sha3.sha3_512
>>> hashlib.new('sha3_512')
<sha3.SHA3512 object at 0x10b381a90>
SHA3
已添加到 built-in hashlib
模块 Python 3.6:
The SHA-3
hash functions sha3_224()
, sha3_256()
, sha3_384()
,
sha3_512()
, and SHAKE
hash functions shake_128()
and shake_256()
were
added. (Contributed by Christian Heimes in issue 16113. Keccak Code
Package by Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van
Assche, and Ronny Van Keer.)
可以通过以下方式使用:
>>> import sys
>>> import hashlib
>>> s = hashlib.new("sha3_512") # sha3_224, sha3_256 and sha3_384 are also available
>>> s.update(b"")
>>> print(s.hexdigest())
a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
用下面的代码,
# $ pip install pysha3
import sys
if sys.version_info < (3, 4):
import sha3
import hashlib
s = hashlib.new("sha3_512")
s.update(b"")
print(s.hexdigest())
我得到
0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e
而不是
a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
比照。 https://en.wikipedia.org/wiki/SHA-3#Examples_of_SHA-3_variants
谁能告诉我吗?
您找到的 pysha3 模块基于 SHA-3 规范的草案,在它被标准化之前。
该模块是作为 Python issue 16113 的 POC 创建的,代码自 2012 年以来未更新。NIST 标准直到 2015 年 10 月才最终确定。因此,无法使用该实现如果您希望它遵循已发布的标准。
该票据链接到一个声称已更新为标准的实现:https://github.com/bjornedstrom/python-sha3。该软件包似乎没有在 PyPI 上列出,但可以直接从 GitHub:
使用 pip 安装pip install git+https://github.com/bjornedstrom/python-sha3
并且这个包确实产生了预期的结果:
>>> import hashlib
>>> import sha3
>>> hashlib.sha3_512(b'').hexdigest()
b'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'
这个包没有修补内置的 hashlib.new()
构造函数,但是通过将构造函数插入模块缓存可以很容易地做到这一点:
>>> hashlib.__builtin_constructor_cache['sha3_512'] = sha3.sha3_512
>>> hashlib.new('sha3_512')
<sha3.SHA3512 object at 0x10b381a90>
SHA3
已添加到 built-in hashlib
模块 Python 3.6:
The
SHA-3
hash functionssha3_224()
,sha3_256()
,sha3_384()
,sha3_512()
, andSHAKE
hash functionsshake_128()
andshake_256()
were added. (Contributed by Christian Heimes in issue 16113. Keccak Code Package by Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche, and Ronny Van Keer.)
可以通过以下方式使用:
>>> import sys
>>> import hashlib
>>> s = hashlib.new("sha3_512") # sha3_224, sha3_256 and sha3_384 are also available
>>> s.update(b"")
>>> print(s.hexdigest())
a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26