Python 字符串到小的固定长度字符串的廉价映射
出于调试目的,我想将一个大字符串(一个session_id,很难可视化)映射到一个,比方说,6个字符的“hash”。这个散列不需要以任何方式安全,只是计算成本低,并且长度固定且缩短(md5太长)。输入字符串可以有任意长度 您将如何在python中实现这个“廉价的_散列”,从而使计算成本不高?它应该生成如下内容:Python 字符串到小的固定长度字符串的廉价映射,python,Python,出于调试目的,我想将一个大字符串(一个session_id,很难可视化)映射到一个,比方说,6个字符的“hash”。这个散列不需要以任何方式安全,只是计算成本低,并且长度固定且缩短(md5太长)。输入字符串可以有任意长度 您将如何在python中实现这个“廉价的_散列”,从而使计算成本不高?它应该生成如下内容: def compute_cheap_hash(txt, length=6): # do some computation return cheap_hash print
def compute_cheap_hash(txt, length=6):
# do some computation
return cheap_hash
print compute_cheap_hash("SDFSGSADSADFSasdfgsadfSDASAFSAGAsaDSFSA2345435adfdasgsaed")
aBxr5u
def cheaphash(字符串,长度=6):
如果长度我发现了类似的问题:
下面是函数:
import hashlib
def compute_cheap_hash(txt, length=6):
# This is just a hash for debugging purposes.
# It does not need to be unique, just fast and short.
hash = hashlib.sha1()
hash.update(txt)
return hash.hexdigest()[:length]
我记不起MD5是否是均匀分布的,但它被设计为即使输入中的最小差异也会有很大的变化
不要相信我的数学,但我猜MD5 hexdigest的前6位的冲突概率是2^64
因此,您只需廉价的\u hash=lambda输入:hashlib.md5(input).hexdigest()[:6]
之后,您可以在任何地方使用hash=cheap\u hash(任意输入)
PS:可以使用任何算法;MD5的计算成本稍低,但hashlib.sha256也是一个流行的选择。如果您不担心冲突,请使用MD5的前6个字符。您可以研究校验和算法,因为它们通常非常快。完全不担心冲突。这是在一个运行时最多1000个字符串——即使有冲突,我也只是在调试。我会有点困惑,仅此而已。
import hashlib
def compute_cheap_hash(txt, length=6):
# This is just a hash for debugging purposes.
# It does not need to be unique, just fast and short.
hash = hashlib.sha1()
hash.update(txt)
return hash.hexdigest()[:length]