2012-01-10 15 views
2

一個非常簡單的問題:將int從c#gethashcode()轉換回字符串?

我正在做一件簡單的事情。我有幾個string,如:

string A = "usd"; 

而且我想在C#中的散列碼:

int audusdReqId = Convert.ToInt32("usd".GetHashCode()); 

現在我怎麼能轉換成32位整數audusdReqIdstring「USD」?

+1

如果你能,這將意味着將有2^32 = 4 294 .NET 967個296不同的字符串,這是不幸運的情況下(這將大致表示4個ASCII字符的可能組合......) – 2012-01-10 15:59:44

回答

16

你不能。哈希碼不包含將其轉換回字符串的所有必要信息。更重要的是,您應該小心使用GetHashCodeThis article解釋你應該使用它。你甚至不能保證GetHashCode將在不同的環境中返回相同的東西。所以你應該而不是出於任何加密目的使用GetHashCode

如果你想創建一個字符串的二進制表示,可以使用

var bytes = System.Text.Encoding.UTF8.GetBytes(someString); 

這會給你一個byte[]該特定字符串。您可以使用GetString上編碼將其轉換回字符串:

var originalString = System.Text.Encoding.UTF8.GetString(bytes); 

如果你想加密的安全字符串,可以使用對稱加密算法,如AES爲Robert Harvey在評論中指出。

+2

正確,它不是雙向轉換。你必須使用其他的東西,比如對稱加密。 – 2012-01-10 15:56:58

+0

很高興知道。領袖 – 2012-01-10 15:58:39

4

hashcode/hash function的目的是它必須是一種方式,它不能被轉換回原來的價值。

有很好的理由爲什麼這是如此。例如,常見的用法是在數據庫中存儲密碼。您不應該知道原始值(純文本密碼),這就是您通常使用散列碼對其進行單編碼的原因。

也有其他用途的存儲值hashsets等