2011-10-20 10 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オブジェクトを再利用することはできますか? HashAlgorithmComputeHash()の呼び出しの間に状態をリセットするか、またはHashAlgorithmオブジェクトを破棄して、新しいデータブロックごとに新しいオブジェクトを作成する必要がありますか? ComputeHashを使用して

答えて

2

が、それは実際の実装に依存するが、通常はステートレスです...あなたは

が見... ComputeHashを呼び出した後Stateにアクセスすることで、実行時にそれを確認することができます

-2

実際に、.NETフレームワークでハッシュが必要な場合は、この機能を手動でコーディングすることを強くお勧めしますが、.NETフレームワークは使用しないでください。

私は32ヵ年の.NETプログラムを64ビットのウィンドウに移しました。プログラムがクラッシュしました。少なくとも、同じ.NETプログラムでは、32/64bitシステムではハッシュ値が異なることがわかりました。 私は.NETハッシュアルゴリズムの代わりにDjbアルゴリズムを使用し、プログラムは正常に実行されます。

この文書はDjbハッシュアルゴリズムに関するもので、C#で書き直すことができます。これは難しい作業ではありません。

+2

私は 'Object.GetHashCodeを()を使用して'永続的なハッシュを作成するために使用してはならないことをあなたに同意。しかし、 'SHA256'のような' System.Security.Cryptography'名前空間でうまく文書化されたハッシュアルゴリズムを利用しても、あなたが警告する問題は発生しません。 –

関連する問題