CRC 計算ツール(CRC-8、CRC-16、CRC-32、CRC-64)
テキストや16進バイト列の CRC-32、CRC-32C、CRC-16(MODBUS・CCITT・XMODEM)、CRC-8、CRC-64 を計算。全バリアントを一度に表示し、16進・10進で出力できます。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
CRC 計算ツールとは?
巡回冗長検査(CRC)は、データの偶発的な変化を検出するための短いチェックサムです。この計算ツールは、テキスト、16進、Base64 の入力に対して CRC-32(zip、PNG、Ethernet)、CRC-32C(iSCSI、ext4、SCTP)、CRC-32/BZIP2、CRC-32/MPEG-2、CRC-16/ARC、CRC-16/MODBUS、CRC-16/CCITT-FALSE、CRC-16/XMODEM、CRC-16/KERMIT、CRC-8/SMBUS、CRC-8/MAXIM、CRC-64/XZ を計算し、すべてのバリアントを一度に一覧表示します。お使いの機器やファイル形式が採用しているものをすぐに見つけられます。
CRC 計算ツールの使い方
- ハッシュ化するテキスト にテキストを入力します。フレームやパケットのバイト列を使う場合は、入力エンコーディングで 16進数のバイト列 を選んで貼り付けます(スペースは無視されます)。
- 必要な CRC の種類 を選びます。選んだ種類が上部に表示され、すべての CRC の種類 の表でもハイライトされます。
- 出力形式 を選びます。16進数(小文字または大文字)か 10進数 のいずれかです。
- コピー をクリックすると選択中の CRC をコピーできます。ほかの種類の値は表から確認できます。
例
123456789 (text)
cbf43926
CRC-32 のチェック値です。表には CRC-32C e3069283、CRC-16/MODBUS 4b37、CRC-16/CCITT-FALSE 29b1、CRC-64/XZ 995dc9bbdf1939fa も表示されます。
CRC 計算ツールを使うべき場面
シリアル通信プロトコル(Modbus RTU、XMODEM)、ファイル形式(ZIP、PNG、gzip)、ストレージやネットワーク(iSCSI、ext4)のチェックサムを計算したりデバッグしたりするときに使います。既知のフレームを表と見比べて、未知の CRC の種類を特定するのにも便利です。ただし、CRC をセキュリティ目的に使ってはいけません。CRC は線形で簡単に偽造でき、誰でもデータを書き換えたうえで CRC を修正できます。その場合は暗号学的ハッシュや MAC を使ってください。
CRC 計算ツールの仕組み
CRC は、データを巨大な2進多項式とみなし、固定の生成多項式で割った余り(mod 2)を求めます。各バリアントは、幅、多項式、初期値、入出力ビットを反転するかどうか、最後に掛ける XOR 値(Rocksoft モデル)で定義されます。このツールはバリアントごとに256エントリのルックアップテーブルを使い、すべてのバリアントをカタログ上のチェック値、つまり ASCII 文字列 123456789 の CRC と照合しています(例: CRC-32 = cbf43926、CRC-32C = e3069283、CRC-16/MODBUS = 4b37)。結果はビッグエンディアンの16進数、または10進数で表示されます。
一般的な使用例
- RTU フレームを送信する前に CRC-16/MODBUS を計算する
- ZIP や PNG のチャンクに保存されている CRC-32 を確認する
- サンプルフレームから、機器が使っている CRC の種類を特定する
- ストレージやネットワークのテストデータ用に CRC-32C の値を生成する
- 組み込み向け CRC 実装のテストベクターを作成する
セキュリティ注意事項
CRC が検出できるのは偶発的なエラーだけです。簡単な線形代数で再計算したり任意の値に合わせたりできるため、意図的な改ざんに対する保護にはなりません。
よくある質問
どの CRC の種類が必要ですか?
プロトコルやフォーマットによって決まっています。ZIP、PNG、Ethernet は CRC-32、iSCSI、ext4、Btrfs は CRC-32C、Modbus RTU は CRC-16/MODBUS、XMODEM は CRC-16/XMODEM を使います。分からない場合は、既知のフレームを表のすべての行と見比べてください。
Modbus は CRC を下位バイトから送りますが、16進表示が違うのはなぜですか?
このツールは CRC を数値としてビッグエンディアンの16進数(例: 4b37)で表示します。Modbus RTU は最下位バイトから送信するため、実際の通信上では 37 4B になります。
16進のフレームで期待と違う CRC になるのはなぜですか?
16進数のバイト列 が選ばれているか確認してください。テキスト (UTF-8) のままだと、0〜9 や a〜f の文字そのものがハッシュ化されます。また、入力には CRC のバイトを含めないでください。
CRC-32 は cksum コマンドと同じですか?
いいえ。POSIX の cksum は反転しない CRC-32 多項式を使い、ファイル長も加えて計算します。zip、gzip、PNG の値を得るには、ここの CRC-32 を使ってください。