首页 > 解决方案 > 用于短唯一内容 ID 的散列算法

问题描述

我想知道用于为内容项列表创建短 + 唯一 ID 的最佳哈希算法是什么。每个内容项都是 100-500kb 大小的 ascii 文件。

我的要求是:

我正在尝试在 python 中实现这一点,所以最好是一个具有 python 实现的算法。

标签: pythonhash

解决方案


在任何其他建议中,我目前决定使用以下方法。我正在采用 blake2 散列算法来创建基于文件内容的加密安全十六进制散列,以最大限度地减少冲突的机会。然后我使用 base64 编码将其映射到一个 ascii 字符集,我只取其中的前 8 位数字。

假设这些数字将完全随机化,从而给出哈希可以采用的 64^8 种组合。我预测我将拥有的内容项数量的上限是 50k,这使我有至少 1 次碰撞的概率为 0.00044%,我认为这对于我的用例来说足够低(可以始终高达 9 或10 位数字(如果将来需要)。

import hashlib
import base64

def get_hash(byte_content, size=8):
    hash_bytes = hashlib.blake2b(byte_content,digest_size=size * 3).digest()
    hash64 = base64.b64encode(hash_bytes).decode("utf-8")[:size]
    return hash64

# Example of use
get_hash(b"some random binary object")

推荐阅读