【问题标题】:How can I find keccak 256 hash in Python如何在 Python 中找到 keccak 256 哈希
【发布时间】:2017-09-18 12:18:27
【问题描述】:

我正在使用 Python 2.7 并且需要找到 keccak 哈希以获取可靠事件。但是我没有看到相同的默认库。

我安装了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']

【问题讨论】:

  • 你有没有查过Keccak的官方网站(拼写!)?
  • 因触摸类型而出现拼写错误。
  • 您是否安装了本机 sha3 库并期望它能够正常工作?如果是这样,请查看 python 包装器pysha3
  • 已安装pysha3,但它似乎不起作用。给出错误AttributeError: 'module' object has no attribute 'keccak_512'
  • pysha3 正在工作,sha3 正在覆盖它。原始实施者应提供不同的导入名称。

标签: python-2.7 cryptography keccak


【解决方案1】:
  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,否则它将更新现有哈希值之上的值。

如果您同时拥有sha3pysha3,它将无法工作,因为import sha3 将默认为sha3 库。

在线好用tool

【讨论】:

  • “在线便捷工具”和 python 代码返回单独的哈希值。对于k.update("0") print (k.hexdigest()),它返回的结果与网站044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116 相同,但对于“1”则不同。为什么它在一种情况下接受输入作为数字,但在另一种情况下似乎采用“”?
  • 对于试图将其用于以太坊的 ppl:hashlib 不会返回正确的哈希值,pycryptodome 是您想要的!
  • @garg10may 和兼容的 pypy 答案?
  • 仅供参考@garg10可能需要传递二进制字符串(即b'age')而不是字符串
  • 这是因为您使用的是python3。对于python2,它将起作用。我现在在答案中强调了相同的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 2012-09-12
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多