2011-10-20 30 views
7

我需要獨立計算多個數據塊的哈希值。事情是這樣的:是HashAlgorithm.ComputeHash()有狀態的嗎?

using(HashAlgorithm hasher = new ActualHashAlgorithm()) { 
    for(int i = 0; i = numberOfBlocks; i++) { 
     byte[] block = getBlock(i); 
     byte[] hash = hasher.ComputeHash(block); 
     // use hash 
    } 
} 

我可以重用塊之間的同HashAlgorithm對象? HashAlgorithm之間的重置狀態調用ComputeHash()或我需要處置HashAlgorithm對象,併爲每個新的數據塊創建一個新的?

回答

2
-2

實際上,當你在.NET框架下需要散列時,我強烈建議手動編寫這個函數,但不要使用.NET框架。

有些月份,我將一個32位.NET程序移植到64位窗口。該程序崩潰。至少我發現散列值在不同的32/64位系統下是不同的,雖然同樣的.NET程序。 我使用Djb算法而不是.NET哈希算法,並且程序運行正常。

本文檔是關於Djb哈希算法,可以用C#重寫。這不是一項艱苦的工作。

+2

我同意你使用'object.GetHashCode()'不應該被用來創建持久的哈希值。但是,在'System.Security.Cryptography'命名空間(如SHA256)中使用良好記錄的散列算法不會導致您提出的問題。 –