一個非常簡單的問題:將int從c#gethashcode()轉換回字符串?
我正在做一件簡單的事情。我有幾個string
,如:
string A = "usd";
而且我想在C#中的散列碼:
int audusdReqId = Convert.ToInt32("usd".GetHashCode());
現在我怎麼能轉換成32位整數audusdReqId
回string
「USD」?
一個非常簡單的問題:將int從c#gethashcode()轉換回字符串?
我正在做一件簡單的事情。我有幾個string
,如:
string A = "usd";
而且我想在C#中的散列碼:
int audusdReqId = Convert.ToInt32("usd".GetHashCode());
現在我怎麼能轉換成32位整數audusdReqId
回string
「USD」?
你不能。哈希碼不包含將其轉換回字符串的所有必要信息。更重要的是,您應該小心使用GetHashCode
。 This article解釋你應該使用它。你甚至不能保證GetHashCode
將在不同的環境中返回相同的東西。所以你應該而不是出於任何加密目的使用GetHashCode
。
如果你想創建一個字符串的二進制表示,可以使用
var bytes = System.Text.Encoding.UTF8.GetBytes(someString);
這會給你一個byte[]
該特定字符串。您可以使用GetString
上編碼將其轉換回字符串:
var originalString = System.Text.Encoding.UTF8.GetString(bytes);
如果你想加密的安全字符串,可以使用對稱加密算法,如AES爲Robert Harvey在評論中指出。
正確,它不是雙向轉換。你必須使用其他的東西,比如對稱加密。 – 2012-01-10 15:56:58
很高興知道。領袖 – 2012-01-10 15:58:39
hashcode/hash function的目的是它必須是一種方式,它不能被轉換回原來的價值。
有很好的理由爲什麼這是如此。例如,常見的用法是在數據庫中存儲密碼。您不應該知道原始值(純文本密碼),這就是您通常使用散列碼對其進行單編碼的原因。
也有其他用途的存儲值hashsets等
如果你能,這將意味着將有2^32 = 4 294 .NET 967個296不同的字符串,這是不幸運的情況下(這將大致表示4個ASCII字符的可能組合......) – 2012-01-10 15:59:44