CRC 計算 — CRC-8 / CRC-16 / CRC-32 / CRC-32C を一括算出
文字列または HEX バイト列を入れて、CRC-8 / CRC-16 (CCITT-FALSE) / CRC-16 (Modbus) / CRC-32 (ISO-HDLC, ZIP/Ethernet) / CRC-32C (Castagnoli, SCTP/iSCSI) を **同時に** 算出します。CRC はデータの誤り検出 (バイナリプロトコル、ZIP/PNG/gzip のフレーム末尾、Modbus 産業機器通信、SCTP/iSCSI など) に使われる軽量チェックサム。ハッシュ生成 (SHA-256 等) と違って暗号用途ではなく、軽量で計算が高速、固定長 (8/16/32 bit) な点が特徴。入力は UTF-8 文字列か `48656c6c6f` 形式の HEX を選択でき、結果は HEX (大文字) と 10 進の両方で表示。各 CRC の **多項式・初期値・反射・XOR-out** をテーブル表示するので、組み込み機器のスペックシートと突き合わせる用途にも。すべてブラウザ内で完結、外部送信は一切なし。
使い方
入力形式 (UTF-8 テキスト / HEX バイト列) を選択。 入力欄にデータを貼り付け。HEX モードでは `48 65 6c` のような区切り (スペース / `-` / `:` / `0x`) を許容します。 5 種類の CRC (CRC-8 / CRC-16 CCITT / CRC-16 Modbus / CRC-32 / CRC-32C) が同時に計算され、HEX と 10 進で表示されます。 各 CRC の仕様 (多項式・初期値・反射・XOR-out) も並べて表示されるので、機器のデータシートと突き合わせ可能。
詳細解説
CRC 計算に使うバイト列には、通信データや内部プロトコルが含まれる
CRC の検証は、組み込みシステム・産業機器・通信プロトコルのデバッグで日常的に行われます。CRC を計算するために入力するデータは、Modbus RTU のフレーム (工場の機器制御コマンド)、ZIP / gzip / PNG ファイルの一部 (チェックサム確認のための内部バイト列)、イーサネットフレームやブルートゥースパケットのキャプチャデータなど、内部プロトコルや業務上の通信内容を含む場合があります。
特に産業用 Modbus では、デバイスアドレス・ファンクションコード・レジスタ値がペイロードに直接含まれます。これらはファクトリーオートメーションの制御ロジックそのものであり、外部に出すべき情報ではありません。HEX バイト列をオンラインの CRC 計算機に貼り付けることは、その制御コマンドを外部サーバーに送信することになります。
組み込みデバッグ中のデータがオンラインに出るリスク
CRC の計算結果がデータシートや参照実装と一致しないとき、デバッグで取得したバイト列をオンラインの CRC 計算機に貼り付けて確認することがあります。そのバイト列がシリアル通信のキャプチャであれば、デバイスの動作状態・設定値・センサーデータが含まれている可能性があります。プロプライエタリな通信プロトコルのフレームであれば、機器の内部仕様を示す情報になります。
CRC 計算は「チェックサムの検証」という目的で行われますが、その副産物として「計算したい実データ」が外部サービスに届いてしまいます。CRC 計算ツールはセキュリティツールではないため、入力データの取り扱いに関するポリシーが明示されていないサービスが多くあります。
多項式テーブルルックアップのみ: ブラウザ内完結
CRC 計算はルックアップテーブル (256 エントリの事前計算テーブル) を使った反復処理で実装されます。各アルゴリズム (CRC-8 / CRC-16 CCITT / CRC-16 Modbus / CRC-32 / CRC-32C) の多項式・初期値・反射設定・XOR-out 値はコードに埋め込まれており、ネットワークリクエストは一切不要です。入力は UTF-8 の TextEncoder.encode() または HEX パーサーでバイト配列に変換後、テーブルルックアップで処理します。
5 種類の CRC が同時に計算されますが、すべてブラウザのメモリ内でのみ処理されます。DevTools の Network タブを開いた状態でデータを入力・変更しても追加リクエストは発生しません。
データシートとの照合を安全に行う
機器のデータシートに記載された CRC 仕様と実装が一致しているかを確認するためのデバッグ作業は、ローカルツールで完結できます。本ツールは各 CRC のパラメータ (Poly / Init / RefIn / RefOut / XorOut) を表示するため、データシートとの突き合わせが容易です。Modbus や各種シリアルプロトコルの実フレームを HEX で入力して CRC 計算値を確認する際、そのフレームの内容は外部サーバーに届きません。
生成多項式・GF(2) と CRC の数学的基盤
CRC は数学的には GF(2) (2 元体、ガロア体) 上の多項式の剰余演算です。入力バイト列 0x48 0x69 (Hi) を bit 列 0100100001101001 に展開し、これを多項式 x^15 + x^11 + x^9 + ... + x^0 として扱います。これに x^N (N は CRC 幅) を掛けて生成多項式 G(x) で割り算した剰余が CRC 値になります。例えば CRC-32 (ISO-HDLC) の生成多項式は x^32 + x^26 + x^23 + ... + x^0 という 32 次の多項式で、0x04C11DB7 という HEX で表現されます。
GF(2) では足し算が XOR、掛け算が AND になるため、通常の整数演算とは挙動が異なります。割り算 (実装上は最上位ビットが立ったら G(x) を XOR してビットシフト) も XOR ベースの操作だけで実行できるため、ハードウェアではシフトレジスタ + XOR ゲートだけの少ない回路で実装でき、高速に動作します。ソフトウェア実装では 256 エントリのルックアップテーブル (各バイト値 0-255 に対する CRC 計算結果を事前計算した表) を使うことで、1 バイトずつ XOR + テーブル参照だけで処理できる「Sarwate アルゴリズム」が定番です。本ツールも全 CRC バリアントでこのテーブル方式を採用しています。
CRC バリアントの命名: なぜ「CRC-16」が複数あるのか
CRC は「CRC-N (N ビット幅)」という名前だけでは一意に定まりません — 同じ 16 ビット幅でも、生成多項式・初期値・入力反転・出力反転・最終 XOR 値の違いで全く別物になります。Catalogue of parametrised CRC algorithms (reveng.sourceforge.net) は 100 以上の CRC バリアントを 6 つのパラメータ (width, poly, init, refin, refout, xorout) でカタログ化しており、同じ多項式でも refin/refout が反対なら全く別の値が出ます。
本ツールが扱う 5 つのバリアントは: CRC-8 (poly 0x07, init 0x00、SMBus / 1-Wire で使用)、CRC-16/CCITT-FALSE (poly 0x1021, init 0xFFFF, refin/refout false、XMODEM などレガシーで多用)、CRC-16/Modbus (poly 0x8005, init 0xFFFF, refin/refout true、Modbus RTU)、CRC-32/ISO-HDLC (poly 0x04C11DB7, init 0xFFFFFFFF, refin/refout true, xorout 0xFFFFFFFF、ZIP / PNG / Ethernet / gzip)、CRC-32C/Castagnoli (poly 0x1EDC6F41, init 0xFFFFFFFF、SCTP / iSCSI / Btrfs)。CRC-32C は 2002 年に Castagnoli が衝突確率を最小化する多項式として発表したもので、Intel CPU の SSE4.2 命令 CRC32C でハードウェア実装されています。
機器のデータシートで「CRC-16 を使う」とだけ書かれていてビットが合わない場合、まず CCITT-FALSE と Modbus を両方試すのが定石です。本ツールは 5 つを同時計算するので、データシート側の仕様が曖昧でも視覚的に「どのバリアントの値と一致するか」を確認できます。フレームの内訳をビット単位で眺めたいときは binary-text で同じ HEX を 0/1 列に展開でき、改ざん検出ではなく暗号学的な完全性を求める場合は hash-generate で SHA-256 などの一方向ダイジェストに切り替えるのが正解です (CRC は誤り検出専用で衝突攻撃には弱いため)。
よくある質問
- CRC とハッシュ (SHA-256 等) はどう違う?
- CRC は誤り検出専用の軽量チェックサム。計算が高速で固定長 (8/16/32 bit) ですが、暗号学的に弱く、悪意ある改ざんは検出できません。一方 SHA-256 などの暗号学的ハッシュは衝突困難性を持ち、改ざん検出にも使えます。CRC は ZIP/PNG/gzip / Ethernet / Modbus などの通信レベルでのビット反転を検知する用途、SHA はパスワード保存・電子署名などの用途です。
- CRC-32 と CRC-32C (Castagnoli) の違いは?
- 多項式が異なります。CRC-32 (ISO-HDLC / IEEE 802.3 / ZIP / Ethernet) は 1975 年策定の `0x04C11DB7` (reflected: `0xEDB88320`)。CRC-32C は Castagnoli 1993 の `0x1EDC6F41` (reflected: `0x82F63B78`) で誤り検出能力 (Hamming distance) が CRC-32 より良いケースが多く、SCTP / iSCSI / Btrfs / Ceph / SSE4.2 の `_mm_crc32_*` 命令で採用されています。
- CRC-16 が 2 種類あるのはなぜ?
- CRC-16 は多項式・初期値の選び方で多くのバリアントがあります。CRC-16/CCITT-FALSE (poly `0x1021`、init `0xFFFF`、reflect なし) は XMODEM / Bluetooth / V.41 で使用、CRC-16/Modbus (poly `0x8005`、init `0xFFFF`、reflect あり) は Modbus 産業バスで使用されます。ハードウェアの仕様書を読むときは必ず poly / init / reflect / xorout の 4 項目を確認してください。
- 結果と外部ツール (オンラインの CRC 計算機) が違う!
- ほぼ確実に多項式や反射の設定が違います。本ツールは Catalogue of parametrised CRC algorithms (`crccalc.com`) の標準パラメータに従っています。仕様列の Poly / Init / RefIn / RefOut / XorOut の 5 項目を相手側ツールと比較してください。
- データは外部に送信されますか?
- いいえ。JavaScript のみで完結します。
「送らない」を確かめるには
このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。
類似のツール
ハッシュ生成 — SHA-1 / 256 / 384 / 512
テキストから SHA-1 / SHA-256 / SHA-384 / SHA-512 のハッシュ値を一括生成します。Web Crypto API ベースでブラウザ内処理。
テキスト ⇄ 2進数 変換
テキストと 2進数 (バイナリ) を相互変換します。Mode 切替で「文字 → 2進数」「2進数 → 文字」を選択。文字は UTF-8 でバイト列に変換し、各バイトを 8 ビットのゼロ埋め 2進数で表現します (絵文字や日本語も複数バイトで正しく変換)。区切りスペースの有無を Option で切替可能、デコード時はスペースや改行を無視して 8 ビットずつ解釈します。すべてブラウザ内で処理され、入力はサーバーに送信されません。
Base64 エンコード / デコード — URL-safe 対応
テキストと Base64 文字列を相互変換します。エンコード時は URL-safe オプション付き、デコード時は URL-safe 形式 (- _、パディングなし) も自動受付。UTF-8 安全、ブラウザ内処理。
Luhn チェック — クレジットカード番号・IMEI 検証
Luhn アルゴリズム (Mod 10) でクレジットカード番号 (Visa / MasterCard / Amex / Discover / JCB / Diners / UnionPay)、IMEI (携帯端末識別番号)、SIN (カナダ社会保障番号) などの妥当性を検証します。複数行を貼り付けて一括チェック、Visa / Amex などのブランドを IIN プレフィックスから自動判定、合計チェックサムの計算過程 (偶数桁を 2 倍、桁数和を取って合計) も表示。テストデータ作成、フォーム入力サニタイズ、データ移行の品質チェック、CSV 取り込み前の bulk validate に。番号はブラウザ内でだけ処理されます。