「123456789」の CRC-32
0xCBF43926 CRC-32/ISO-HDLC で 0xCBF43926。ZIP・PNG・イーサネット・gzip が使っている変種です。
16進数またはテキストを貼り付けるだけで、CRC-8・CRC-16・CRC-32 の全63変種を一度に算出します。手元のチェックサムと一致しない場合は期待値を入力すれば、MODBUS・CCITT-FALSE・XMODEM・KERMIT のどれかを自動で特定。処理はすべてブラウザ内で完結します。
| 変種 | 結果 | 多項式 | 初期値 | 入力/出力の反転 | 最終 XOR |
|---|---|---|---|---|---|
| CRC-8 | |||||
| CRC-8/AUTOSAR | 0x2F | 0xFF | false / false | 0xFF | |
| CRC-8/BLUETOOTH | 0xA7 | 0x00 | true / true | 0x00 | |
| CRC-8/CDMA2000 | 0x9B | 0xFF | false / false | 0x00 | |
| CRC-8/DARC | 0x39 | 0x00 | true / true | 0x00 | |
| CRC-8/DVB-S2 | 0xD5 | 0x00 | false / false | 0x00 | |
| CRC-8/GSM-A | 0x1D | 0x00 | false / false | 0x00 | |
| CRC-8/GSM-B | 0x49 | 0x00 | false / false | 0xFF | |
| CRC-8/HITAG | 0x1D | 0xFF | false / false | 0x00 | |
| CRC-8/I-432-1 CRC-8/ITU | 0x07 | 0x00 | false / false | 0x55 | |
| CRC-8/I-CODE | 0x1D | 0xFD | false / false | 0x00 | |
| CRC-8/LTE | 0x9B | 0x00 | false / false | 0x00 | |
| CRC-8/MAXIM-DOW CRC-8/MAXIM · DOW-CRC | 0x31 | 0x00 | true / true | 0x00 | |
| CRC-8/MIFARE-MAD | 0x1D | 0xC7 | false / false | 0x00 | |
| CRC-8/NRSC-5 | 0x31 | 0xFF | false / false | 0x00 | |
| CRC-8/OPENSAFETY | 0x2F | 0x00 | false / false | 0x00 | |
| CRC-8/ROHC | 0x07 | 0xFF | true / true | 0x00 | |
| CRC-8/SAE-J1850 CRC-8/J1850 | 0x1D | 0xFF | false / false | 0xFF | |
| CRC-8/SMBUS CRC-8 | 0x07 | 0x00 | false / false | 0x00 | |
| CRC-8/TECH-3250 CRC-8/AES · CRC-8/EBU | 0x1D | 0xFF | true / true | 0x00 | |
| CRC-8/WCDMA | 0x9B | 0x00 | true / true | 0x00 | |
| CRC-16 | |||||
| CRC-16/ARC CRC-16 · CRC-16/IBM · CRC-16/LHA | 0x8005 | 0x0000 | true / true | 0x0000 | |
| CRC-16/CDMA2000 | 0xC867 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/CMS | 0x8005 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/DDS-110 | 0x8005 | 0x800D | false / false | 0x0000 | |
| CRC-16/DECT-R R-CRC-16 | 0x0589 | 0x0000 | false / false | 0x0001 | |
| CRC-16/DECT-X X-CRC-16 | 0x0589 | 0x0000 | false / false | 0x0000 | |
| CRC-16/DNP | 0x3D65 | 0x0000 | true / true | 0xFFFF | |
| CRC-16/EN-13757 | 0x3D65 | 0x0000 | false / false | 0xFFFF | |
| CRC-16/GENIBUS CRC-16/DARC · CRC-16/EPC · CRC-16/EPC-C1G2 · CRC-16/I-CODE | 0x1021 | 0xFFFF | false / false | 0xFFFF | |
| CRC-16/GSM | 0x1021 | 0x0000 | false / false | 0xFFFF | |
| CRC-16/IBM-3740 CRC-16/CCITT-FALSE · CRC-16/AUTOSAR | 0x1021 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/IBM-SDLC CRC-16/X-25 · CRC-16/X25 · CRC-16/ISO-HDLC · CRC-B · X-25 | 0x1021 | 0xFFFF | true / true | 0xFFFF | |
| CRC-16/ISO-IEC-14443-3-A CRC-A | 0x1021 | 0xC6C6 | true / true | 0x0000 | |
| CRC-16/KERMIT CRC-16/CCITT · CRC-16/CCITT-TRUE · CRC-16/V-41-LSB · CRC-CCITT | 0x1021 | 0x0000 | true / true | 0x0000 | |
| CRC-16/LJ1200 | 0x6F63 | 0x0000 | false / false | 0x0000 | |
| CRC-16/M17 | 0x5935 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/MAXIM-DOW CRC-16/MAXIM | 0x8005 | 0x0000 | true / true | 0xFFFF | |
| CRC-16/MCRF4XX | 0x1021 | 0xFFFF | true / true | 0x0000 | |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | true / true | 0x0000 | |
| CRC-16/NRSC-5 | 0x080B | 0xFFFF | true / true | 0x0000 | |
| CRC-16/OPENSAFETY-A | 0x5935 | 0x0000 | false / false | 0x0000 | |
| CRC-16/OPENSAFETY-B | 0x755B | 0x0000 | false / false | 0x0000 | |
| CRC-16/PROFIBUS CRC-16/IEC-61158-2 | 0x1DCF | 0xFFFF | false / false | 0xFFFF | |
| CRC-16/RIELLO | 0x1021 | 0xB2AA | true / true | 0x0000 | |
| CRC-16/SPI-FUJITSU CRC-16/AUG-CCITT | 0x1021 | 0x1D0F | false / false | 0x0000 | |
| CRC-16/T10-DIF | 0x8BB7 | 0x0000 | false / false | 0x0000 | |
| CRC-16/TELEDISK | 0xA097 | 0x0000 | false / false | 0x0000 | |
| CRC-16/TMS37157 | 0x1021 | 0x89EC | true / true | 0x0000 | |
| CRC-16/UMTS CRC-16/BUYPASS · CRC-16/VERIFONE | 0x8005 | 0x0000 | false / false | 0x0000 | |
| CRC-16/USB | 0x8005 | 0xFFFF | true / true | 0xFFFF | |
| CRC-16/XMODEM CRC-16/ACORN · CRC-16/LTE · CRC-16/V-41-MSB · ZMODEM | 0x1021 | 0x0000 | false / false | 0x0000 | |
| CRC-32 | |||||
| CRC-32/AIXM CRC-32Q | 0x814141AB | 0x00000000 | false / false | 0x00000000 | |
| CRC-32/AUTOSAR | 0xF4ACFB13 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/BASE91-D CRC-32D | 0xA833982B | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/BZIP2 CRC-32/AAL5 · CRC-32/DECT-B · B-CRC-32 | 0x04C11DB7 | 0xFFFFFFFF | false / false | 0xFFFFFFFF | |
| CRC-32/CD-ROM-EDC | 0x8001801B | 0x00000000 | true / true | 0x00000000 | |
| CRC-32/CKSUM CRC-32/POSIX | 0x04C11DB7 | 0x00000000 | false / false | 0xFFFFFFFF | |
| CRC-32/ISCSI CRC-32C · CRC-32/BASE91-C · CRC-32/CASTAGNOLI · CRC-32/INTERLAKEN | 0x1EDC6F41 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/ISO-HDLC CRC-32 · CRC-32/ADCCP · CRC-32/V-42 · CRC-32/XZ · PKZIP | 0x04C11DB7 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/JAMCRC | 0x04C11DB7 | 0xFFFFFFFF | true / true | 0x00000000 | |
| CRC-32/MEF | 0x741B8CD7 | 0xFFFFFFFF | true / true | 0x00000000 | |
| CRC-32/MPEG-2 | 0x04C11DB7 | 0xFFFFFFFF | false / false | 0x00000000 | |
| CRC-32/XFER | 0x000000AF | 0x00000000 | false / false | 0x00000000 | |
機器の資料にある多項式が上の表に載っていないときに使ってください。
Go Tools エンジニアリングチームが構築し、検証しています。
0xCBF43926 CRC-32/ISO-HDLC で 0xCBF43926。ZIP・PNG・イーサネット・gzip が使っている変種です。
0x4B37 0x4B37。パラメータは poly 0x8005、init 0xFFFF、入力・出力ともに反転あり、最終 XOR なしです。
0x29B1 0x29B1。カタログ上の正式名称は CRC-16/IBM-3740 で、poly 0x1021、init 0xFFFF、反転なしです。
63 この計算機は収録済みの63変種を扱います。内訳はビット幅 8 が 20、16 が 31、32 が 12 です。
巡回冗長検査は、データのかたまりを非常に長い2進多項式の係数とみなし、それを固定の生成多項式で法2の演算により割り、余りを取り出す方式です。この余りがチェックサムになります。この構成が広く使われている理由は2つあります。1つは、除算がシフトと XOR に還元されるため、ハードウェアでのコストがほとんどゼロで済むこと。もう1つは、代数が統計的な期待ではなく確定的な保証を与えることです。適切に選んだ16ビット多項式であれば、すべての1ビット誤り、実用的なブロック長の範囲内のすべての2ビット誤り、奇数個のビット反転すべて、そして連続16ビット以下のバースト誤りすべてを検出できます。
実務で CRC をややこしくしているのは、多項式が6つあるパラメータのうちの1つにすぎないという点です。2つの実装が多項式については完全に一致していても、結果が1つも合わないことがあります。レジスタの初期値が違い、入力バイトと出力レジスタのビット順を反転させるかどうかが違い、最後に XOR する定数が違うからです。CRC の変種とはこのパラメータ組全体を指すのであって、多項式単体ではありません。だからこそ「CRC-16」のような名前は、それだけではほとんど何も特定しておらず、このページが多項式・初期値・2つの反転フラグ・最終 XOR をすべての結果の隣に並べ、ビット幅をグループ見出しにしているのもそのためです。
表では示しきれない注意点が1つあります。16ビット多項式が奇数個のビット反転をすべて検出できるのは、x+1 がその多項式を割り切る場合に限られます。最もよく出会う2つ、0x1021 と 0x8005 はこれを満たしますが、すべての多項式が満たすわけではありません。CRC-16/T10-DIF と CRC-16/PROFIBUS はその例外にあたります。
// CRC-16/MODBUS: poly=0x8005, init=0xFFFF, refin/refout=true, xorout=0x0000
// Written in the reflected form, so the polynomial appears bit-reversed as 0xA001.
function crc16Modbus(bytes) {
let crc = 0xffff;
for (const byte of bytes) {
crc ^= byte;
for (let i = 0; i < 8; i++) {
crc = crc & 1 ? (crc >>> 1) ^ 0xa001 : crc >>> 1;
}
}
return crc;
}
crc16Modbus([0x01, 0x03, 0x00, 0x00, 0x00, 0x0a]); // 0xCDC5
// On the wire Modbus RTU sends the low byte first: ... 0x0A 0xC5 0xCD CRC-8・CRC-16・CRC-32 が入力に合わせて同時に再計算されます。何かを見る前にドロップダウンで当てずっぽうに選ぶ必要はありません。
渡されたチェックサムを入力すると、それを生成する変種がハイライトされます。未知のアルゴリズムの特定が、20回試す作業から1手に変わります。
各行に RevEng カタログの正式名称と、現場で実際に使われている別名を並べて表示します。CCITT-FALSE、CRC-16/IBM、CRC-32C、X-25 などです。
生成多項式、初期値、2つの反転フラグ、最終 XOR が結果の横に並ぶので、一致を仕様書と突き合わせて検証できます。
ビット幅、多項式、初期値、反転、最終 XOR はすべて編集可能です。どのカタログにも載らなかった多項式に対応します。
計算はブラウザ内で行われます。本番のフレームやファームウェアイメージが端末の外に出ることはありません。
123456789
CRC-32/ISO-HDLC = 0xCBF43926, CRC-16/MODBUS = 0x4B37, CRC-8/SMBUS = 0xF4
RevEng カタログに収録された CRC 変種は、いずれも ASCII 文字列 123456789 に対する結果を公表しています。そのためこの入力が標準の自己診断になります。あるライブラリの出力がここの表と食い違うなら、間違っているのはライブラリの側です。
01 03 00 00 00 0A
CRC-16/MODBUS = 0xCDC5
スレーブ 1 から保持レジスタを読み出すフレームです。Modbus RTU は CRC の下位バイトを先に送出するため、実際に回線を流れるのは 01 03 00 00 00 0A C5 CD になります。「チェックサムが合わない」の相当部分は、この並びの反転が原因です。
DEADBEEF
MODBUS = 0xC19B, CCITT-FALSE = 0x4097, XMODEM = 0xC457, KERMIT = 0x1915
Hex モードで読み取るため、文字列としての8文字ではなく4バイトになります。よく知られた4つの CRC-16 変種は、その4バイトに対してまったく無関係な値を返します。壊れているわけではありません。違うのは初期値・反転・最終 XOR であって、正しさではないからです。
123456789(期待値 0x29B1)
CRC-16/IBM-3740(お使いのマニュアルでは CRC-16/CCITT-FALSE と表記されているかもしれません)
この計算機が本来想定している使い方です。データと、誰かが計算したチェックサムは手元にある。ただし変種の名前だけが分からない。だから、その値を再現できるパラメータ組を逆に探しにいきます。
プロトコルのフレームはほぼ必ず16進数です。テキストモードを使うのは、123456789 のような自己診断用の文字列そのものにチェックサムをかけるときだけにしてください。
Hex モードでは区切り文字が無視されるため、01 03 00 00 00 0A、0x01 0x03、010300 00000A のいずれも受け付けます。
表はビット幅ごとにグループ分けされています。正式名称は RevEng カタログに準拠し、その下に機器マニュアルで使われていそうな別名を併記しています。
すでにチェックサムがあり、その変種を知りたい場合は、期待値欄に入力してハイライトされた行を読んでください。
テキストモードのままだと、この計算機は16進ダンプが表しているバイトではなく、その ASCII 文字のほうをハッシュします。Hex モードに切り替えてください。モード切替の下に出るバイト数が、どちらの読み方になっているかを教えてくれます。
Text mode, input "01 03" -> 5 bytes: 30 31 20 30 33
Hex mode, input "01 03" -> 2 bytes: 01 03
Modbus RTU は CRC の下位バイトを先に送信します。末尾が C5 CD のフレームが持つチェックサムは 0xCDC5 であって、0xC5CD ではありません。
expected 0xC5CD (bytes read in transmission order)
expected 0xCDC5 (bytes reassembled low-byte-first)
CRC が覆うのは、その手前にあるバイト列です。トレーラまで含めてフレーム全体を投入すると、得られるのはチェックサムではなく剰余(residue)です。
01 03 00 00 00 0A C5 CD <- trailer included
01 03 00 00 00 0A <- payload only
収録済みの16ビット幅の変種は31通りあります。残る5つのパラメータがなければ、この名前は何も絞り込めていません。
spec says: "trailer is a CRC-16"
spec says: "CRC-16/MODBUS, poly 0x8005, init 0xFFFF, refin/refout true"
セキュリティツール
AESをオンラインで復号 — GCM/CBC/CTR、パスフレーズまたは生鍵に対応し、OpenSSLとCryptoJSの「U2FsdGVkX1」形式を自動検出します。処理は100%ブラウザ内で完結し、鍵がこのページから出ることはありません。
セキュリティツール
無料のAESオンライン暗号化ツール — AES-128/192/256、GCM/CBC/CTR、パスフレーズ(PBKDF2)または生鍵に対応。処理は100%ブラウザ内で完結し、外部にアップロードされません。
セキュリティツール
bcrypt パスワードハッシュをオンラインで生成・検証。コスト調整、$2b$/$2a$/$2y$ プレフィックス対応。100% ブラウザ内で処理し、パスワードは一切送信されません。
セキュリティツール
無料のオンライン HMAC 生成・検証ツール。Text・Hex・Base64 の鍵で HMAC-SHA256/SHA1/SHA384/SHA512 を計算し、Hex/Base64/Base64URL で出力します。100% ブラウザ内で完結 —— 鍵はページから外に出ません。
セキュリティツール
JWTトークンを無料のJWTデコーダーでオンラインデコード。ヘッダー、ペイロード、署名、有効期限、アルゴリズム、クレームを即座に検査できます。100%ブラウザ動作 — トークンはデバイスから外に出ません。登録不要、追跡なし。
セキュリティツール
無料のオンラインJWTジェネレーター&エンコーダー。ヘッダーとペイロードを組み立て、HS256、RS256、ES256で即座に署名できます。100%ブラウザ動作 — シークレットと鍵はデバイスから外に出ません。