Skip to main content
 首页 » 编程设计

python之字符串到小的固定长度字符串的廉价映射

2025年05月04日20mayingbao

只是出于调试 的目的,我想将一个大字符串(一个 session_id,很难形象化)映射到一个,比方说,6 个字符的“散列”。这个散列不需要以任何方式保证安全,只是计算成本低,并且长度固定且减少(md5 太长)。输入字符串可以有任意长度。

您将如何在 Python 中实现这个“cheap_hash”以便计算成本不高?它应该生成如下内容:

def compute_cheap_hash(txt, length=6): 
    # do some computation 
    return cheap_hash 
 
print compute_cheap_hash("SDFSGSADSADFSasdfgsadfSDASAFSAGAsaDSFSA2345435adfdasgsaed") 
aBxr5u 

请您参考如下方法:

我不记得 MD5 是否是均匀分布的,但它被设计为即使输入中的最小差异也会发生很大变化。

不要相信我的数学,但我猜 MD5 十六进制摘要的前 6 位的碰撞几率是 16^6 分之一,大约是 1700 万分之一。

所以你可以cheap_hash = lambda input: hashlib.md5(input).hexdigest()[:6]。

之后你可以在任何地方使用hash = cheap_hash(any_input)。

PS:任何算法都可以; MD5 的计算成本略低,但 hashlib.sha256 也是一种流行的选择。