pysha3没有给出正确的答案

2024-09-28 23:09:25 发布

您现在位置:Python中文网/ 问答频道 /正文

用下面的代码

# $ 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())

我得到了

^{pr2}$

而不是

a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26

参考https://en.wikipedia.org/wiki/SHA-3#Examples_of_SHA-3_variants

有人能给我个建议吗?在


Tags: installpip代码importinfonewifversion
2条回答

在Python3.6中,SHA3已添加到内置的^{}模块中:

What’s New In 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

您发现的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

而这个方案确实产生了预期的结果:

^{pr2}$

此包不修补内置的hashlib.new()构造函数,但通过将构造函数插入模块缓存可以轻松完成:

>>> hashlib.__builtin_constructor_cache['sha3_512'] = sha3.sha3_512
>>> hashlib.new('sha3_512')
<sha3.SHA3512 object at 0x10b381a90>

相关问题 更多 >