为什么sha3在不同的python模块中会产生不同的结果?

时间:2018-04-12 09:42:07

标签: python hash sha-3 keccak

我意识到默认hashlib.sha3_256 hasher不像其他解决方案那样计算哈希值,例如,其他python的模块。下面,我在Python 3.6.3上比较了hashlibsha3算法的实现。

来自sha2_256的实施正确结果(根据其他互联网资源),而sha3结果完全不同。它怎么可能?我错过了什么吗?

hashlib.sha3_256

结果:

import sha3
import hashlib

def test(s):
    k = sha3.keccak_256()
    k.update(s.encode())
    print('test string="{s}", sha3.keccak_256()="{h}"'.format(s=s, h=k.hexdigest()))

    h = hashlib.sha3_256()
    h.update(s.encode())
    print('test string="{s}", hashlib.keccak_256()="{h}"'.format(s=s, h=h.hexdigest()))


test('')
test('eth')
test('foo.bar')

1 个答案:

答案 0 :(得分:0)

我认为它们是不同的实现:

>>> hashlib.sha3_256("asdf".encode()).hexdigest()
'dd2781f4c51bccdbe23e4d398b8a82261f585c278dbb4b84989fea70e76723a9'
>>> sha3.sha3_256("asdf".encode()).hexdigest()
'dd2781f4c51bccdbe23e4d398b8a82261f585c278dbb4b84989fea70e76723a9'
>>> sha3.keccak_256("asdf".encode()).hexdigest()
'4c8f18581c0167eb90a761b4a304e009b924f03b619a0c0e8ea3adfce20aee64'

经过搜索,我发现这是真的。

https://github.com/status-im/nim-keccak-tiny/issues/1

修改

进一步搜索后......似乎keccak_256不是标准实现。