只是出于调试 的目的,我想将一个大字符串(一个 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 也是一种流行的选择。
