短的唯一内容ID使用的哈希算法。

问题描述 投票:0回答:1

我想知道什么是最好的哈希算法来为内容项目列表创建短+唯一的id。 每个内容项目都是100-500kb的ascii文件。

我的要求是。

  • 必须尽可能的短,我的存储空间非常有限 我想让它们保持在10个字符以内(用ascii文件表示时)。

  • 必须是唯一的,即没有碰撞或至少碰撞的机会微乎其微。

  • 我不需要它是加密的安全的。

  • 我不需要它的速度过快(每个内容项目都很小)。

我试图在python中实现这个功能,所以最好是有一个python实现的算法。

python hash
1个回答
0
投票

在没有其他建议的情况下,我目前决定使用以下方法。我采用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")
© www.soinside.com 2019 - 2024. All rights reserved.