我正在寻找一个哈希函数,可以为密码签名方案生成指定位大小的摘要。密码学SE上的一个相关问题(https://crypto.stackexchange.com/questions/3558/are-there-hash-algorithms-with-variable-length-output)指定存在用于此特定目的的算法。
我可以使用任何Python库吗?
当前,我的方案只是将SHA-256输出填充到所需的大小。我还尝试了Python SHA3库-pysha3 1.0.2,但是它具有一些可以使用的预定义摘要大小。
我想要一个散列函数,该函数可以采用所需的摘要大小作为参数,并相应地散列消息(如果可能)
答案 0 :(得分:3)
作为一个粗略的答案:您可能对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"。
希望这足够长,并且您不需要外部库!
答案 1 :(得分: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))