• ベストアンサー

チェックサムとCRC

複数のデータを照合する時にチェックサムを使っています。 CRCというやり方もあると聞きましたが、 具体的にはどういうことをやるのでしょうか? 宜しくお願いします。 例えば、シリアル通信とかで8ビットデータが複数送られてきて、 そのデータ群が正しいかどうかをチェックする時。

noname#220914
noname#220914

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

「CRC アルゴリズム」とかで検索すると出てくるかと。 http://hyphenlink.blog48.fc2.com/blog-entry-53.html とか。 んで…チェックサムの場合は…下記のような場合にエラーが検出されません。 ・データの順番が入れ替わった場合。  00 01 02 03 04 05 06 でチェックサムが15h    ↓  00 05 02 03 04 01 06 でもチェックサムは15h ・データの一部が減算されていて、別の一部が同じだけ加算されていた場合。  00 01 02 03 04 05 06 でチェックサムが15h    ↓  04 01 00 00 09 01 06 でもチェックサムは15h CRCだとデータの並びが変わった場合は算出されるCRC値も異なります。  00 01 02 03 04 05 06 でCRC32がAD5809F9  00 05 02 03 04 01 06 でCRC32が52A58EEB  04 01 00 00 09 01 06 でCRC32が5DD68733

関連するQ&A

  • 「チェックサム」とは何?

    今まで、いろいろ使ってきた外付けハードディスクを、一端からっぽにして きれいにしようと思い、こちらで質問したところ初期化のやり方を教えていただきました。 それでその操作に関して再度質問なのですが、Finderからサービス→ディスクユーティリティ へ行くと、    イメージチェックサム(CRC-32)を計算    イメージチェックサム(MD-5)を計算 と出てきてどちらかを選ぶようになっています。 チェックサムについては調べたら 「バイナリーファイルチェックのことで、32桁の「チェックサム」を作成するものです。これは、DDPイメージファイルの受取者が再作成または比較して、データが破損していないことを確認できる数値」(これはMD5についての記述) とありました。わかるようなわからないような…漠然と理解した感じです。 では、CRC-32とMD-5は、どちらを選べばいいのでしょうか? 詳しい方、教えていただけますでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Mac
  • チェックサムについて

    現在、古い機械の通信データの解析を行っています。 その通信データには末尾にチェックサムのようなコードが付与されていて それがどういうロジックで計算されているものなのかが判らず困っております。 通信で取得したデータを以下に添付しておりますので、 演算法則を解明していただけないでしょうか。 データ    チェックサム 080  → 80 180  → 03 280  → 53 380  → D0 480  → F3 580  → 70 680  → 20 780  → A3 880  → 66 980  → E5 A80  → 4C B80  → 1C C80  → 9F D80  → BC E80  → 3F F80  → 6F 以上、よろしくお願いいたします。

  • CRCのアルゴリズムって、どんな計算するんですか?

    こんにちはお世話になります。 私はネットワークに興味があるオジサンです。 先日、データリンク層のプロトコル群を勉強していたとき、誤り訂正でCRCが出てきました。誤り訂正ではパリティーチェックやチェックサム等は聞き覚えがありましたが、CRCは始めて見たので興味を持ち少し調べてみようと思いました。 それが間違いの元でした。 インターネットでCRCの構造を詳しく解説するサイトが少なく、その解説は難しすぎて手におえません。 数学にはめっぽう弱い私には、多項式同士の加減乗除算などは頭痛の肥やしにしかなりません。 今ではCRCが気になって勉強に集中できない状態です。 そこで、表題にもあるCRCのアルゴリズムを、何方か分かり易く教えてくださいませんか。もしくは、CRCのアルゴリズムを簡単に解説している書籍をご存知でしたら教えてください。 カテゴリー(本来は数学系?)が違うかもしれませんが、何卒よろしくお願い申し上げます。

  • CRCの使い方、mysqldumpについて

    先日、社内DBのcronによる定期バックアップのデータが圧縮により破損したらしく、 顧客データを数日前まで戻さなくてはいけなくなりました。 私の所属している部署ではなかったのですが、同様の問題が発生するかもしれないので、 cronで毎日取っているバックアップデータをチェックするなどの方法を求められました。 ただ、私は経験もないため何をどうすればいいのか分かりません。 CRCでチェックすればいいのでは?と言われたのでCRCについて調べたのですが、 ググってみたのですが、CRCエラーの対処法や、CRCの解説がほとんどで、実際の使い方が見つかりません。 どのようにすれば、CRCでチェックサムを付加することができるのでしょうか? 付加したデータは専用の通信をするのでしょうか? scpやrsyncのようなコマンドがあると思っていたのですが、見つかりません… CRCでやりたいことは以下になります。 「DBサーバ 」と「DBバックアップサーバ」があり、 OSは「DBサーバ」が CentOS release 6.3 (Final) で、 「DBバックアップサーバ」が CentOS release 6.5 (Final) です。 「DBバックアップサーバ」上で mysqldump {「DBサーバ 」} {DB名} > {hoge.sql} をcronで実行しています。 この {hoge.sql} が正常か異常かを確かめたいのです。 サーバ上で障害等ない場合、mysqldumpで異常なデータが出力されたりすることはあるのでしょうか? HD上の空きには余裕がある状態で、他に特にサーバ上での問題もない場合、圧縮でデータが破損することはあるのでしょうか? CRCでできないのであれば、他にどのような手法があるのでしょうか? 完全に丸投げの質問で申し訳ないのですが、どうぞご教示をお願いいたします。

  • CRCについて

    CRCの算出についてなのですが http://www2c.biglobe.ne.jp/~osakana/vc/pc/crc.html こちらのサイトを参考にすると 1. データを一つ(1バイト)とってきます 2. CRC値を左ビットシフトして、桁上がりがあればさらに生成多項式とXORを取ります 3. データを左ビットシフトして、桁上がりがあればCRC値と1のXORを取ります 4. あと7回(1バイト=8ビットなので)2と3を繰り返します 5. 残りのデータがあれば1に戻ります とあります。 例えばアドレス部00000000にデータ01が入っているもの(ファイルサイズ1バイト)を算出しようとした場合 手計算を行うとCRC16は0001、CRC32は00000001になりそうなのですが いくつかのフリーソフトで実際にバイナリエディタを用いて1バイトのファイルを作成し、試して見たところ CRC16が1E0E CRC32がA505DF1B と出ます。 一般的な算出方法では、上記の説明以外に何か別の処理、初期値などがあるのでしょうか? お分かりになる方是非教えてください。 よろしくお願いします。

  • TCPヘッダのチェックサムについて

    通信エラーが発生し、 エラーが発生した時のパケットのTCPヘッダの チェックサムが"FFFF"だったのですが チェックサムで"FFFF"はありえるのでしょうか?

  • CRCアルゴリズムのZ/2Z上の多項式の係数列とは?

    こんにちはお世話になります。 私はネットワークに興味があるオジサンです。 先日、データリンク層のプロトコル群を勉強していたとき、誤り訂正でCRCが出てきました。 CRC(Cyclic Redundancy Cheak)の解説には、 >ビット列をZ/2Z上の多項式の係数列とみなし, もとのデータにチェックビットを 継ぎ足して必ず特定の生成多項式で割り切れるデータのみを送るようにする. > とありました。 上記の「Z/2Z上」とは何を指しているのでしょうか。 数学が大の苦手ですので優しく解説していただければ幸いです。 何卒よろしくお願い申し上げます。

  • CRCの計算でエラー

    VisualC++2008でプログラミングしております。簡単なモデムプログラムを作っているのですが、エラー検出で利用するCRCでつまづいています。具体的には、特定のファイルを送信しようとすると常にエラーが発生したと判断され、再送要求をし続けてしまいます。 以前、チェックサムでXORを利用した時も同様なことが発生したので、XORの計算があやしいのかなと感じています。デバッグでは正しく計算されるようなのですが、リリースで実行すると上記のようになります。 どなたかアドバイスを頂ければと思います。よろしくお願いします。

  • 水平垂直パリティチェックとCRC方式について

    質問させてください。 基本情報処理試験において、誤り訂正方式の一つとして ・水平垂直パリティチェック ・CRC方式 というものがあります。 水平垂直パリティチェックは、ビット列を縦横に確認してデータに誤りがないか確認する方法、 CRC方式は、生成多項式という特別な式でデータに誤りがないか確認する方法 ということはわかるのですが、 それぞれのメリットデメリットは何でしょうか? 例えば、CRC方式では水平垂直パリティチェックではできない、2ビット以上の誤り訂正ができたりするのでしょうか? どなたか回答をお願いします。

  • CRCチェック 多項式の選び方

    今、CRCチェックの多項式を何にすればよいか悩んでいます。多項式を選ぶ基準はあるのでしょうか?私は、マイコンのソフト設計を業務にしており、EEPROMにマイコン側で書き込んだデータが正しく、EEPROMから読み出しているかを確認する為にCRCチェックで確認をしようとしています。例えば、EEPROMの容量は1024BYTEで、各セクション=16BYTE(1セクション=16BYTE)単位で各セクションには、SHORT型もしくはCHAR型等のサイズは多種のデータが混在します。セクション単位でCRCチェックを実施しようと考えたいますが、CRCの多項式を選ぶ基準について御教示願いたいです。

専門家に質問してみよう