2016-11-07 35 views
1

私はシリアル通信プロトコルを使用しており、使用されているチェックサムアルゴリズムについて調べるのにいくつかの問題があります。私はいくつかを試したCRC16 algorithmsとそのどれも動作するようです。CRC16アルゴリズムを使用した図解

メッセージ(16進数で)次のようになります。

55 13 04 03 09 f1 01 00 00 06 50 08 00 02 00 00 00 cc 1a 
55 13 04 03 09 f1 01 00 00 06 50 00 00 02 00 00 00 94 3b 
55 13 04 03 09 f1 02 00 00 06 50 08 00 02 00 00 00 7f e4 
55 13 04 03 09 f1 02 00 00 06 50 00 00 02 00 00 00 27 c5 
55 13 04 03 09 f1 03 00 00 06 50 08 00 02 00 00 00 ee b1 
55 13 04 03 09 f1 03 00 00 06 50 00 00 02 00 00 00 b6 90 

私は開始バイトが0x55であり、必要な場合には第2バイトは、メッセージの長さ

で、私はより多くのデータを提供できることを知っています。すべてのヘルプやヒントをいただければ幸いです。)

敬具、アミール

+0

これは[security.SE]にとっては良い質問ですか? – Cullub

答えて

0

これは、CRCを超える計算されたバイトかに依存します。

RevEngを使用すると、例からCRCパラメータを抽出できます。あなたの例から、これは多項式0x1021を持つ16ビットCRCであり、CRCが反映されていることが明らかです(多項式は入力に適用されるとビット反転され、CRCレジスタは左にシフトされず右にシフトされます) 。ただし、初期値と最後の排他的論理和は、CRCが計算されるバイト数に依存します。それらを実際に釘付けにするには、長さの異なるメッセージの例も必要です。

RevEng catalog of 16-bit CRCsは、それができることを、いくつかの標準的なCRCを持つ:

width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0x0000 check=0x6f91 name="CRC-16/MCRF4XX" 
width=16 poly=0x1021 init=0xb2aa refin=true refout=true xorout=0x0000 check=0x63d0 name="CRC-16/RIELLO" 
width=16 poly=0x1021 init=0x89ec refin=true refout=true xorout=0x0000 check=0x26b1 name="CRC-16/TMS37157" 
width=16 poly=0x1021 init=0xc6c6 refin=true refout=true xorout=0x0000 check=0xbf05 name="CRC-A" 
width=16 poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 check=0x2189 name="KERMIT" 
width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25" 

私は全部を想定し、それらのいずれかを得ることはありません、私は最初の1バイトまたは2バイトをドロップした場合のメッセージである、また。

このリストから最も一般的なCRCは、KERMIT(CCITT CRC-16とも呼ばれます)とX-25です。

関連する問題