pysha3 не дает правильного ответа
С помощью следующего кода,
# $ 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
Кто-нибудь может мне посоветовать?
2 ответа
Модуль pysha3, который вы нашли, был основан на черновой версии спецификации SHA-3, прежде чем он был стандартизирован.
Модуль был создан как POC для Python, выпуск 16113, и код не обновлялся с 2012 года. Стандарт NIST не был завершен до октября 2015 года. Таким образом, реализация не может быть использована, если вы ожидаете, что она будет следовать выпущен стандарт.
Этот тикет ссылается на реализацию, которая утверждает, что была обновлена до стандарта: https://github.com/bjornedstrom/python-sha3. Этот пакет не отображается в PyPI, но может быть установлен с помощью pip непосредственно из GitHub:
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
был добавлен во встроенный hashlib
модуль в Python 3.6:
SHA-3
хеш-функцииsha3_224()
,sha3_256()
,sha3_384()
,sha3_512()
, а такжеSHAKE
хеш-функцииshake_128()
а такжеshake_256()
были добавлены. (Предоставлено Кристианом Хаймсом в выпуске 16113. Пакет кодов Keccak, подготовленный Гвидо Бертони, Джоан Деймен, Микаэлем Петерсом, Жилем Ван Ассше и Ронни Ван Кером.)
Его можно использовать следующим образом:
>>> 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