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

Python 字符串到小的固定长度字符串的廉价映射,python,Python,出于调试目的,我想将一个大字符串(一个session_id,很难可视化)映射到一个,比方说,6个字符的“hash”。这个散列不需要以任何方式安全,只是计算成本低,并且长度固定且缩短(md5太长)。输入字符串可以有任意长度 您将如何在python中实现这个“廉价的_散列”,从而使计算成本不高?它应该生成如下内容: def compute_cheap_hash(txt, length=6): # do some computation return cheap_hash print

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

您将如何在python中实现这个“廉价的_散列”,从而使计算成本不高?它应该生成如下内容:

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]