CRC32はおそらくあなたのニーズに合っています。これはthis questionで議論されています。
ハッシュプリミティブを切り捨てるという点では、キーの生成に使用されるSSL/TLS Pseudo Random Function (PRF)が唯一よく使われています。 HMAC、シード、およびラベルを使用して、必要なだけ多くのバイトを生成します。必要なバイト数に切り捨てます。ご質問のよう
しかし、あなたはのInt32のにハッシュの出力を読み、あなたが妄想している場合、それらを一緒にXORできます
ハッシュ関数は同じようにその入力を配布することを前提として考えると
static void Main()
{
int xorCrc = GetHashedCrc(new SHA1Cng(), new byte[] {0xDE, 0xAD, 0xBE, 0xEF});
}
private static int GetHashedCrc(HashAlgorithm algorithm, byte[] bytesToHash)
{
byte[] hash = algorithm.ComputeHash(bytesToHash);
int totalInt32s = hash.Length/sizeof(int);
int result = 0;
for(int i = 0; i < totalInt32s; i++)
{
int currentInt = BitConverter.ToInt32(hash, sizeof(int)*i);
result = result^currentInt;
}
return result;
}
20文字のSHA-1ハッシュ全体を保存できないということは何ですか?また、CRC32はハッシュではなく、伝送エラー検出メカニズムなので、エラー検出が必要な場合、ハッシュは実際にそれを行う方法ではありません。 – jmucchiello
スペースを節約するために、4バイトのハッシュが選択されました。ハッシュは、監視デバイスからのチェックサムデータブロックに使用され、数百万のデータブロックが存在する可能性があります。おそらく全体を格納することは問題にならないでしょう。 あなたは何か面白いと言った。 「伝送エラー検出メカニズム」とハッシュの違いは何ですか?暗号強度(この特定のアプリケーションはそれを必要としません)? – raven
恥知らずのセルフプラグ:cmdhashgenはCRC32をサポートしており、HashAlgorithmから派生しているので、他と同じ方法で使用できます。Crc32.csをチェックしてください:http://cmdtools.codeplex.com/ –