1

最初にチェックサムを含む4KBのバッファがあるとしましょう。このバッファーには、他のバッファーを参照するメタデータが含まれています。注意:バッファはメモリマップトファイルです。バッファの1つが無効であることに気付きました(チェックサムが機能しないか、チェックサムは正常ですが、無効なバッファを参照しています)。ここで、別の無効なバッファーを参照しているバッファーを無効にします。バッファを無効にする数学的に最良の方法は何ですか?チェックサム自体を破損してデータと一致しないようにするか、データを破損してチェックサムと一致しない可能性があります。それとも、完全に3番目のより良い方法がありますか?その価値については、これはCRC32バリアントです。

4

1 に答える 1

2

参照バッファのCRCが有効であると仮定すると、そこから1を引くだけでバッファが無効になります。あなたの説明から、参照されたバッファはCRCが間違っている可能性があると述べているため、これが当てはまるようです。

参照元の CRC32有効でない場合、最も安全な方法は、CRC を計算してから1引くことです。最初に正しい CRC を知る必要があります。これは、CRC をランダムに選択しても、正しい可能性は低いものの、正しい可能性は約 40 億分の 1 であるからです。

ここでは、CRC を変更するのが最も安全なオプションのようです。CRC32 アルゴリズムの数学的分析を行う以外に、データへの特定の変更が同じCRC 値を生成しないことを保証する方法はありません (多数のデータ セットが同じ CRC にマップされる可能性があるため)。

ただし、特定のデータ セットが常に同じ CRC を生成することは確実なので、CRC を別のものに変更することで、ブロックが無効になることを確認できます。

于 2011-06-12T22:38:57.370 に答える