2013-11-15 37 views
0

有人可以請指教,爲什麼計算後的散列,存儲一個負值e?散列後爲什麼是負值?

static byte[] bytes; 
BigInteger[] numbers = {A, ANeg, Aseed, AseedNeg, C1, C2, C1Neg, C2Neg}; 
foreach (BigInteger number in numbers) 
{ 
    bytes = number.ToByteArray(); 
} 
SHA1 sha = new SHA1CryptoServiceProvider(); 
hash = sha.ComputeHash(bytes); 
e = new BigInteger(hash); 
+3

這取決於生成的散列的最高位,心不是它? – LINQ2Vodka

+0

您是否試圖將哈希轉換回BigInteger?你不能那樣做。 –

+3

這個'BigInteger'構造函數有很好的文檔記錄 - 如果最高位是1,則結果編號是負數。但它也沒有意義:SHA1哈希不僅僅是一個加密文本塊的數字。這只是一堆字節,你正在給它一個你所選擇的「含義」。 – Jon

回答

0

由於同樣的原因,「-3」是負數,「2」不是;用於指示數字的符號在零以下:在某人寫下「-3」的情況下,這是「 - 」。在BigInteger的情況下,這是最重要的一點。

0

MSDN上BigInteger(byte[]) constructor documentation提供以下功能:

如果值最高字節的最高位被設置,導致BigInteger的值爲負

爲了防止正值被誤解爲負值,可以在數組的末尾添加一個零字節值。

應用的文檔:

  1. e將是負的,如果在hash的最後一個字節(即,hash[hash.Length - 1])大於0x7F的(127)大。

  2. 爲了解釋的hash值作爲一個無符號數,一個零字節的值添加到的hash結束時,例如,

    e = new BigInteger(hash.Concat(new byte[]{0}).ToArray()); 
    
+0

謝謝,問題解決了 – user2994366