0

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

from 的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')

结果:

test string="", sha3.keccak_256()="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
test string="", hashlib.keccak_256()="a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a"
test string="eth", sha3.keccak_256()="4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0"
test string="eth", hashlib.keccak_256()="4b3cdfda85c576e43c848d43fdf8e901d8d02553fec8ee56289d10b8dc47d997"
test string="foo.bar", sha3.keccak_256()="461e2b648c9a6c0c3e2cab45884ae0fcab21c655fcf588f2a45e6596e3e0e9a7"
test string="foo.bar", hashlib.keccak_256()="e55dea66e750540f599874a18596745b0c5705bc6873ca3ef1ccd2acbba88670"
4

1 回答 1

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不是标准实现。

于 2018-04-12T10:07:29.607 回答