2010-10-31 103 views
2

從從MSDN http://msdn.microsoft.com/en-us/library/system.string.gethashcode.aspx從String.GetHashCode解密哈希字符串?

爲 「ABC」 的哈希代碼此示例代碼:536991770

但如何轉換回 「536991770」 到 「ABC」?

+6

你猜。很多。 – 2010-10-31 08:40:15

+0

有可能得到**一個字符串**,它有這個散列碼,但它可能不會是**你散列的字符串**。 – CodesInChaos 2010-10-31 09:24:21

+0

你有沒有想過,只有4,294,967,296不同的哈希碼,但無限多的字符串? – Timwi 2010-10-31 11:23:50

回答

14

沒有辦法從散列碼中獲取值。見hash-function的定義。 散列值不用於唯一標識原始值,對於每種類型的輸入值,值都是而不是

散列函數可以將兩個或更多個 鍵映射到相同的散列值。在許多應用中,希望最小化這種衝突的發生,這意味着函數必須儘可能均勻地將密鑰映射到散列值 。

8

你不行。哈希是一種方法。

與哈希值的事情是,你鬆散的信息。獨立於字符串的長度,結果總是一個整數。這意味着例如獲取具有10,000個字符的字符串也將導致整數。當然不可能從這個整數中得到原始字符串。

2

沒有辦法「解密」散列碼。除其他原因之外,因爲兩個不同的字符串可能會產生相同的哈希碼。單靠這一特徵就無法扭轉這一過程。

1

你不能,
即使你將不得不與世界上所有的字符串及其哈希碼錶你就無法做到這一點,因爲有更多的字符串,然後整數(約4個十億整數),這樣就是幾個導致相同散列碼的字符串。