【问题标题】:Are there any variable length hash functions available for Python?是否有任何可用于 Python 的可变长度哈希函数?
【发布时间】:2019-06-29 02:40:27
【问题描述】:

我正在寻找一个哈希函数,它可以为加密签名方案生成指定位大小的摘要。 Cryptography SE 上的一个相关问题 (https://crypto.stackexchange.com/questions/3558/are-there-hash-algorithms-with-variable-length-output) 指定存在用于此特定目的的算法。
有没有我可以使用的 Python 库?

目前,我的方案只是将 SHA-256 输出填充到所需的大小。我也尝试过 Python SHA3 库 - pysha3 1.0.2,但是它有一些可以使用的预定义摘要大小。

我想要一个散列函数,它可以将所需的摘要大小作为参数,并相应地散列消息(如果可能的话)

【问题讨论】:

    标签: python hash


    【解决方案1】:

    粗略回答:您可能对 python 3.6+ 中的内置 Blake2 function in hashlib 感兴趣。

    它最多只能输出 64 个字节,但是是"faster than MD5, SHA-1, SHA-2, and SHA-3, yet is at least as secure as the latest standard SHA-3"

    希望这足够长,您不需要外部库!

    【讨论】:

      【解决方案2】:

      任何可扩展输出函数 (XOF) 都可用于获取给定大小的摘要。来自维基百科:

      可扩展输出函数 (XOF) 是加密哈希,可以输出任意数量的随机位。

      SHA-3 下提供的功能之一包括 SHAKE128 和 SHAKE256 功能。它们遵循sponge construction 的一般属性。海绵函数可以生成任意长度的输出。名称中的 128 和 256 表示其最高安全级别(以位为单位),如 FIPS 202 的 A.1 和 A.2 节所述。

      在 python 中,首先install PyCryptodome 库:

      pip install pycryptodome
      


      可以按如下方式生成 20 个字节的哈希:

      from Crypto.Hash import SHAKE256
      from binascii import hexlify
      shake = SHAKE256.new()
      shake.update(b'Some data')
      print hexlify(shake.read(20))
      

      关于 SHAKE256 和 SHA3 的更多参考资料: Link 1 Link 2

      【讨论】:

        猜你喜欢
        • 2011-01-03
        • 2020-06-30
        • 2018-11-11
        • 1970-01-01
        • 1970-01-01
        • 2015-01-08
        • 2019-09-05
        • 1970-01-01
        相关资源
        最近更新 更多