2016-02-11 3 views
2

С помощью следующего кода,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#Examples_of_SHA-3_variants

Может ли кто-нибудь мне посоветовать?

+0

Как был определен ожидаемый результат? –

+0

Вы можете включить ссылку на страницу [Wikipedia] (https://en.wikipedia.org/wiki/SHA-3#Examples_of_SHA-3_variants). –

+0

@MartijnPieters: Должен сказать, я нахожу, что редактирование * очень * бесполезно. (Например, гораздо сложнее проверить проблему с endian.) Все, что заставляет SO отображать горизонтальные полосы прокрутки, является, по моему мнению, BadThing (TM). Я не вижу, что было неправильно с пропорциональным шрифтом для дисплея. –

ответ

3

Выбранный модуль pysha3 был основан на проекте спецификации спецификации SHA-3, прежде чем он был стандартизован.

Модуль был создан как POC для Python issue 16113, а код не обновлялся с 2012 года. Стандарт NIST не был доработан до октября 2015 года. Таким образом, реализация не может быть использована, если вы ожидаете, что она следуйте выпуску стандарта.

Этот билет связан с реализацией, которая, как утверждается, была обновлена ​​до стандарта: https://github.com/bjornedstrom/python-sha3. Этот пакет не кажется, должны быть перечислены на PyPI, но может быть установлен с пип непосредственно из 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> 
+0

Я вижу «sha3.c: 27: 20: фатальная ошибка: Python.h: Нет такого файла или каталога компиляция завершается ошибка:. Команда 'x86_64-Linux-гну-НКУ' не удалось со статусом выхода 1 " –

+0

следует из" очистки ... Command/USR/бен/питон -c «импорт Setuptools, разметить; __ __ файл = '/ TMP/пип-do9L2k-сборка/setup.py'; Exec (компилировать (getattr (tokenize, 'open', open) (__ file __). read().replace ('\ r \ n', '\ n'), __file__, 'exec')) "install -record /tmp/pip-NjGrG3-record/install-record.txt - управляется с помощью одной версии-снаружи --compile --user неудачу с кодом ошибки 1 в/TMP/пип-do9L2k-строить Сохранение журнала отладки для отказа в /home/michachan/.pip/pip.log " –

+0

Я ' Sudo APT-получить install python-dev' Он установлен сейчас. –

0

SHA3 был добавлен на встроенный в hashlib модуль в Python 3.6:

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