ネイティブ HW 関数を備えたマイクロコントローラーを使用して、多項式を自由に定義できるメモリのチャンクから CRC32 ハッシュを計算しています。システムには、16 ビットや 8 ビットなど、CRC のビット長が異なるさまざまなデータ リンクがあることがわかりました。これにはハードウェア エンジンを使用する予定です。
オンライン ツールを使用した簡単なテストでは、8 ビット CRC と同じ結果を持つ 32 ビット多項式を見つけることができると結論付けました。例:
- 8ビットエンジンとpoly 0xb7で「サンプル文字列」をハッシュすると、結果は0x97になります
- 16ビットエンジンとpoly 0xb700で「サンプル文字列」をハッシュすると、結果は0x9700になります
- ...32 ビット エンジンと poly 0xb7000000 は、結果 0x97000000 を生成します (初期値がゼロ、最終 xor がゼロ、反射なし)
そのため、ポリゴンをゼロでパディングし、結果を右シフトするとうまくいくようです。しかし、32 ビット エンジンを 16 または 8 ビット エンジンとして動作させる一連のパラメータを「常に」見つけることは可能ですか? (poly、final xor、init val、inversions を含む)
より多くのコンテキストを提供し、「ネイティブ エンジンを使用しないでください」などの「バイパス回答」を防ぐには: 一般的な設計エラーが冗長な処理ノードに伝播するのを防ぐ必要がある、安全性が重要なシステムのシナリオがあります。そのための 1 つの解決策は、1 つのノードでソフトウェア ベースの CRC 計算を行い、そのペアでハードウェア ベースの CRC 計算を行うことです。