是否有任何可用于 Python 的可变长度哈希函数



我正在寻找一个哈希函数,它可以为加密签名方案生成指定位大小的摘要。加密 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 3.6+中hashlib中内置的Blake2函数感兴趣。

它最多只能输出64个字节,但"比MD5,SHA-1,SHA-2和SHA-3更快,但至少与最新标准SHA-3一样安全"。

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

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

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

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

在python中,首先安装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的更多参考资料:链接 1链接 2

最新更新