2

使用以下代码,

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

谁能给我建议?

4

2 回答 2

3

您找到的 pysha3 模块是基于SHA-3 规范的草案,在它被标准化之前。

该模块是作为Python 问题 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>
于 2016-02-11T08:33:42.430 回答
0

SHA3hashlib已添加到Python 3.6的内置模块中:

Python 3.6 的新功能

SHA-3散列函数、sha3_224()sha3_256()sha3_384()和 散列函数sha3_512()和被添加。(由 Christian Heimes 在 issue 16113 中提供。Guido Bertoni、Joan Daemen、Michaël Peeters、Gilles Van Assche 和 Ronny Van Keer 的 Keccak 代码包。)SHAKEshake_128()shake_256()

它可以通过以下方式使用:

>>> 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
于 2017-01-29T18:45:09.140 回答