当前位置:  开发笔记 > 编程语言 > 正文

字符串的哈希值具有特定长度

如何解决《字符串的哈希值具有特定长度》经验,为你挑选了2个好方法。

有没有办法生成字符串的散列,以便散列本身具有特定的长度?我有一个生成41字节哈希值(SHA-1)的函数,但我需要它最多33个字节(由于某些硬件限制).如果我将41字节的哈希截断为33,我可能(当然!)失去了唯一性.

或者实际上我认为MD5算法很适合,如果我能在你的帮助下找到一些C代码.

编辑:谢谢大家的快速和知识渊博的回复.我选择使用MD5哈希,它适合我的目的.唯一性是一个重要问题,但我不认为这些哈希的数量在任何给定时间都非常大 - 这些哈希代表家庭局域网上的软件服务器,因此最多可能有5个,可能还有10个运行.



1> Jon Skeet..:

如果我将41字节的哈希截断为33,我可能(当然!)失去了唯一性.

是什么让你认为你现在有独特性?是的,当你只用33个字节而不是41个字节时,显然有更高的碰撞几率,但是你需要充分意识到,对于任何使用哈希都有意义的情况,碰撞是不可能的,而不是不可能的.首先.如果您正在散列超过41个字节的数据,那么显然有更多可能的组合,而不是可用的哈希值.

现在,无论你是最好截断SHA-1哈希还是使用更短的哈希,比如MD5,我都不知道.我认为在保留整个哈希值时我会更加自信,但MD5 已知已知的漏洞,这些漏洞可能会或可能不会对您的特定应用程序造成影响.



2> Staale..:

计算哈希的方法是不可能的.要将散列长度限制为33个字节,您必须将其删除.您可以xor第一个和最后33个字节,因为这可能会保留更多信息.但即使有33个字节,你也没有那么大的碰撞机会.

md5:http://www.md5hashing.com/c++/

顺便说一句.md5是16个字节,sha1是20个字节,sha256是32个字节,但是作为十六进制字符串,它们的大小都是双倍的.如果你可以存储字节,你甚至可以使用sha256.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有