7

我正在使用 Python 2.7,需要keccak为solidity 事件查找哈希。但是我没有看到相同的默认库。

我安装了sha3,但它似乎没有提供此功能。使用以下代码尝试了pysha3

  import sha3
  k = sha3.keccak_512()
  k.update('age')
  k.hexdigest()

但是得到了错误

AttributeError: 'module' object has no attribute 'keccak_512'

sha3 确实没有这个模块

>>> dir(sha3)
['SHA3224', 'SHA3256', 'SHA3384', 'SHA3512', 'SHAKE128', 'SHAKE256', '_SHA3Base', '_SHAKEBase', '__all__', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_sha3', 'binascii', 'copy', 'hashlib', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'shake128', 'shake256']
4

1 回答 1

22
  1. pycryptodome

     from Crypto.Hash import keccak
     k = keccak.new(digest_bits=256)
     k.update('age')
     print k.hexdigest()
    
  2. pysha3

    import sha3
    k = sha3.keccak_256()
    k.update('age')
    print k.hexdigest()
    

请注意

  1. 对于python3字符串需要以二进制形式传递k.update(b'age')
  2. 如果您想找到一个新的哈希值,您需要k再次初始化,否则它将更新现有哈希值之上的值。

如果你同时拥有sha3and pysha3,它将不起作用,因为import sha3将默认为sha3lib。

在线便捷工具

于 2017-09-18T12:25:58.510 回答