是否有任何可变长度的散列函数可用于Python?

问题描述 投票:2回答:2

我要寻找一个散列函数,可以产生特定位大小的摘要进行加密签名方案。在加密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
2个回答
3
投票

作为一个粗略的答案:你可能有兴趣在Python中内置Blake2 function in hashlib 3.6+。

它只输出可达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)可以用于获得给定的尺寸的一个摘要。维基百科:

延伸的输出功能(XOFs)是加密散列可以输出任意大量的随机找位。

一个SHA-3下提供的功能的包括SHAKE128和SHAKE256功能。他们遵循从sponge construction的一般属性。海绵函数可以生成输出的任意长度。在其名称中的128和256表示其最大的安全级别(位),如在第A.1和FIPS 202的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

© www.soinside.com 2019 - 2024. All rights reserved.