2010-03-14 125 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更寬鬆的許可證。