有没有一种加密方法可以接受任何长度的字符串并产生10个字符以下的哈希值?我想产生合理唯一的ID,但基于消息内容,而不是随机。
但是,如果不可能使用任意长度的字符串,我可以接受将消息限制为整数值。但是,在这种情况下,对于两个连续的整数,哈希不能相似。
发布于 2010-12-31 07:37:46
您可以使用任何常用的散列算法(例如,SHA-1),它会给你一个比你需要的稍长一点的结果。只需将结果截断到所需的长度,这可能就足够好了。
例如,在Python中:
>>> import hashlib
>>> hash = hashlib.sha1("my message".encode("UTF-8")).hexdigest()
>>> hash
'104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb'
>>> hash[:10]
'104ab42f11'
发布于 2016-10-19 06:40:36
如果你不需要一个强大的算法来防止有意的修改,我找到了一种叫做adler32的算法,它能产生非常短(~8个字符)的结果。从这里的下拉列表中选择它来试用:
发布于 2010-12-31 07:54:57
您需要对内容进行哈希处理,以得出摘要。有很多散列可用,但是10个字符对于结果集来说太小了。很久以前,人们使用CRC-32,它产生33位的散列(基本上是4个字符加1位)。还有CRC-64,它产生一个65位的散列。产生128位散列(16字节/字符)的MD5出于加密目的被认为是被破坏的,因为可以找到具有相同散列的两个消息。不用说,任何时候你从任意长度的消息中创建16字节的摘要,你最终都会得到重复的消息。摘要越短,冲突的风险就越大。
但是,您所关心的两个连续消息(无论是否为整数)的散列不相似的问题对于所有散列都应该是正确的。即使原始消息中的一位更改也会产生截然不同的结果摘要。
所以,使用像CRC-64这样的代码(并对结果进行64进制)应该会让你找到你想要的邻居。
https://stackoverflow.com/questions/4567089
复制相似问题