什么是没有碰撞的最短的人类可读哈希?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是没有碰撞的最短的人类可读哈希?相关的知识,希望对你有一定的参考价值。

我有长期工人Ws的ID工人总数。他们分组工作,每组最多有M成员。

要为每个工作组合生成唯一的组名,请对ID进行汇总是不可行的。我想在flattened排序的worker id列表上做一个MD5()。我不确定我应该保留多少位数,以便在不碰撞的情况下让人难忘。

log((26 + 10),W ^ M)是否足够?我应该保留多少个冗余的字符?我还有其他专门的哈希函数,可以更好地适应这种情况吗?

答案

最多10个采集的500个对象的组合总数约为2.5091E + 20,这将适合68位(base36中约13个字符),但我没有看到一个简单的算法来为每个组合分配一个数字。一个更简单的算法是这样的:如果你为每个人分配一个9位数字(0到511)并连接多达10个数字,你将得到90位。要对base36中的那些进行编码,您需要18个字符。

如果要使用base36中仅包含6个字符的哈希值(大约31位),则冲突的概率取决于应用程序生命周期中使用的组的总数。如果我们假设每天有10个新组(以前没有遇到过)并且应用程序将使用10年,我们将获得36500组。使用Nick Barnes提供的计算器表明,在这种情况下,有27%的机会发生碰撞。您可以根据您的特定情况调整假设,然后更改散列长度以适合您想要的最大碰撞几率。

以上是关于什么是没有碰撞的最短的人类可读哈希?的主要内容,如果未能解决你的问题,请参考以下文章

导致堆栈溢出的最短代码是啥? [关闭]

通过 URL 将用户所在的 URL 提交到另一个进程的最简洁、最短的 Javascript 是啥?

用php计算字符串中大写字母的最简单、最短的方法?

设计新的数据库表模式,任何行业标准的最短列名称的存储和处理效率?

用布尔值(PHP)评估数组的最短方法?

Dijkstra算法(求一点到任意一点的最短距离)