CRC-32 / CRC-32C チェックサム計算ツール | 2つの多項式を1画面で
テキストまたは16進バイト列から、IEEE 802.3 と Castagnoli の2種類の CRC-32 を16進・10進で並べて算出。手元のチェックサムが「どちらの多項式で作られたか」を即座に突き合わせるためのツール。
💡 このツールについて
ネット上の CRC ツールの多くは多項式を1つに決め打ちしており、それが落とし穴になる。「CRC-32」は単一の値ではないからだ。古典的な IEEE 802.3 版(反転多項式 0xEDB88320)は zip・gzip・PNG・Ethernet フレームで使われる。一方 Castagnoli の CRC-32C(0x82F63B78)は SCTP・iSCSI・Btrfs・ext4 のメタデータなどに採用され、現代の CPU が専用命令で計算できる点が普及の理由になっている。
デバッガに表示された保存値と自分のコードの出力が食い違うとき、原因の多くは多項式の取り違えにある。本ツールは両方を同時に表示するため、ツールチェーンを組み直さずに未知の値を正しい側へ照合できる。16進バイトモードに切り替えれば、パケットキャプチャや16進エディタに並ぶ生バイトをそのまま投入でき、0x 接頭辞・空白・カンマ・コロン区切りも許容される。
🧐 よくある質問
Q. CRC-32 と CRC-32C の違いは?
A. 生成多項式が異なる。IEEE 802.3 CRC-32 は反転多項式 0xEDB88320 を使い zip・gzip・PNG に現れる。CRC-32C は Castagnoli の 0x82F63B78 を使い、誤り検出能力が高く、x86 では crc32 命令でハードウェア高速化される。
Q. ファイル内のチェックサムと一致しない。なぜ?
A. CRC の変種は多項式に加えてビット反転・初期値・最終 XOR が異なる。本ツールは標準パラメータ(初期値 0xFFFFFFFF・入出力反転・最終 XOR 0xFFFFFFFF)を採用しており、形式が別パラメータを使う場合は同じ多項式でも値が変わる。
Q. 計算が正しいか確認したい。
A. 検査文字列 123456789 は IEEE CRC-32 で 0xCBF43926、CRC-32C で 0xE3069283 を返す。これらは公表されている基準値であり、自分のデータに使う前に妥当性を確認できる。
Q. 空入力で 00000000 になるのは?
A. 標準の初期値と最終 XOR では、0バイトの CRC は相殺して 0x00000000 になる。これは仕様どおりの正しい結果でありバグではない。
📚 豆知識
CRC-32C が SCTP や iSCSI に採用されたのは偶然ではない。Guy Castagnoli は1993年の探索で、見逃される最小ビット誤り数を表すハミング距離を基準に多項式を順位付けした。彼の多項式は一般的なメッセージ長で IEEE 版より多くの誤りパターンを検出する。後に Intel が SSE4.2 命令でその多項式をハードウェア実装したため、近年設計されたファイルシステムは「C」版を選ぶ一方、手元の zip 書庫には今も元の多項式が残っている。