首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >产生短散列的散列函数?

产生短散列的散列函数?
EN

Stack Overflow用户
提问于 2010-12-31 07:32:30
回答 7查看 176.4K关注 0票数 128

有没有一种加密方法可以接受任何长度的字符串并产生10个字符以下的哈希值?我想产生合理唯一的ID,但基于消息内容,而不是随机。

但是,如果不可能使用任意长度的字符串,我可以接受将消息限制为整数值。但是,在这种情况下,对于两个连续的整数,哈希不能相似。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-12-31 07:37:46

您可以使用任何常用的散列算法(例如,SHA-1),它会给你一个比你需要的稍长一点的结果。只需将结果截断到所需的长度,这可能就足够好了。

例如,在Python中:

代码语言:javascript
复制
>>> import hashlib
>>> hash = hashlib.sha1("my message".encode("UTF-8")).hexdigest()
>>> hash
'104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb'
>>> hash[:10]
'104ab42f11'
票数 100
EN

Stack Overflow用户

发布于 2016-10-19 06:40:36

如果你不需要一个强大的算法来防止有意的修改,我找到了一种叫做adler32的算法,它能产生非常短(~8个字符)的结果。从这里的下拉列表中选择它来试用:

http://www.sha1-online.com/

票数 51
EN

Stack Overflow用户

发布于 2010-12-31 07:54:57

您需要对内容进行哈希处理,以得出摘要。有很多散列可用,但是10个字符对于结果集来说太小了。很久以前,人们使用CRC-32,它产生33位的散列(基本上是4个字符加1位)。还有CRC-64,它产生一个65位的散列。产生128位散列(16字节/字符)的MD5出于加密目的被认为是被破坏的,因为可以找到具有相同散列的两个消息。不用说,任何时候你从任意长度的消息中创建16字节的摘要,你最终都会得到重复的消息。摘要越短,冲突的风险就越大。

但是,您所关心的两个连续消息(无论是否为整数)的散列不相似的问题对于所有散列都应该是正确的。即使原始消息中的一位更改也会产生截然不同的结果摘要。

所以,使用像CRC-64这样的代码(并对结果进行64进制)应该会让你找到你想要的邻居。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4567089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档