我正在嘗試使用下面的代碼生成固定長度哈希。固定長度哈希
public int GetStableHash(string s)
{
string strKey = "myHashingKey";
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(strKey);
byte[] contentBuffer = UE.GetBytes(s);
// Initialize the keyed hash object.
HMACSHA256 myhmacsha256 = new HMACSHA256(key);
byte[] hashValue = myhmacsha256.ComputeHash(contentBuffer);
return BitConverter.ToInt32(hashValue,0);
}
它給了我這樣的輸出。
-1635597425
我需要一個正數的固定長度(8位)。有人可以告訴我該怎麼做。
在此先感謝。
這工作得很好,但我有一個問題。 (我認爲)但是e兩個10位數字的其餘部分可以相同。所以再次「這將是一個有效的散列」?對不起,如果我困惑的東西。 – 2012-03-14 10:36:04
@MujtabaHassan散列不是「唯一」的。在統計上難以重現(它有各種性質來保證它)。完整的SHA1散列長度爲160位。您拿走的位數越多,找到具有相同散列的第二個對象越容易。 – xanatos 2012-03-14 10:38:52