我意识到默认hashlib.sha3_256
hasher不像其他解决方案那样计算哈希值,例如,其他python的模块。下面,我在Python 3.6.3上比较了hashlib
和sha3
算法的实现。
来自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')
答案 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
不是标准实现。