2010-03-14 124 views
1

我想创建一个任意长度字符串的唯一哈希(16个字符长)。是否有一个好的库为C++实现了MD5或SHA-1,我可以实现这个功能? (也可能是如何使用它的一个例子)字符串的唯一哈希

+8

你要求的是根本不可能的。有更多的仲裁长度字符串比16个字符长度的字符串,所以_unique_哈希是不可能的。有很多库实现MD5和SHA-1 algorthims,但是你能否澄清你的需求? – 2010-03-14 22:31:50

+2

任意长度字符串的固定长度哈希不可能是唯一的。 – sepp2k 2010-03-14 22:32:21

+0

是否可以枚举字符串并在之后构建散列函数?你在寻找http://en.wikipedia.org/wiki/Perfect_hash_function? – 2010-03-14 22:41:38

回答

5

Pigeonhole Principle解释了为什么你问的唯一性是不可能的。

+0

MD5是如何工作的,因为它将任意长度的字符串散列为32位十六进制数值 – Aly 2010-03-14 23:37:25

+0

是的,但是如果通过MD5运行足够多的字符串,最终会得到两个具有相同散列的不同字符串:http:// www。 google.com/search?q=md5+collision – 2010-03-14 23:56:59

1

您需要openssl库。它具有用于此目的的标准加密哈希的实现。

1

nss提供了许多散列和加密算法,并且拥有比OpenSSL更宽松的许可证。