問題タブ [crc16]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHP HEXでCRC16 CCITTを計算するには?
PHP CRC16 CCITT 関数を使用してチェックサムを計算しようとしています。
デバイスから、チェックサムを含む PACKET が送信されます。
10 00 00 00 00 00 00 00 12 51 09 08 00 18 00 04 02 14 00 0c 00 0c 02 1c 00 02 00 00 00 00 00 00 a0 77
チェックサムは最後にあります:a0 77
使ってみました
成功しない場合、CRC 16 計算は次を返しますE6 F4
。 a0 77
検索すると、正しい 16 進情報が返されます。
100000000000000012510908001800040214000c000c021c0002000000000000
ウェブサイトhttp://www.lammertbies.nl/comm/info/crc-calculation.htmlにありますが、再現できません。(入力タイプは必ず HEX を選択してください)
16 進値の文字列の crc16 CCITT を取得する方法を教えてください。
100000000000000012510908001800040214000c000c021c0002000000000000
チェックサムを探していますa0 77
java - DESFire マスター キーの変更中に 0x1E エラー (INTEGRITY_ERROR) が発生しました。
全体の更新 1: 質問をもう一度参照してください。
私は最近カードで作業しています。現在、PICCのデフォルトのマスター キーDESFire
を変更することにしました。
(私はすでにマスターキーですべての 8 バイト 0x00 を正常に認証できました)
1- デフォルトmaster key
は 0 の 8byte
です00 00 00 00 00 00 00 00
。
2-master key
私が選んだ新作は 16byte
です。
それは:
3-古いマスターキーで認証します(まだ変更されておらず、8バイトのゼロです)。乱数は次のとおりです。
ランダム A = 8 バイトの数値
ランダム B = 8 バイトの数値
4 - ランダム A とランダム B を使用して毎回セッション キーを作成します。セッション キー = ランダム A の最初の 4 バイト + ランダム B の最初の 4 バイト
5 - i 次の方法で新しいマスター キーの CRC16 を作成します。結果は次のとおりです: D8 EC (新しい PICC マスター キーは 16 バイトにすることができますか? それとも 8 バイトにする必要がありますか? ちなみに、新しいマスター キーに 16 バイトの値を選択しました)
6 - crc とパディング (解読済み) を使用して新しい PICC キーを作成します
7- crc16 を計算し、それを新しいキーに追加します。
8 - 上記の新しいマスター キーを以下の方法で暗号化し、24 バイトの暗号化を取得しました。
暗号化で使用されるクラス DES は次のとおりです。
9- そして最後に、パラメータ バイト配列を入力し、命令 (c4) と共に送信します。
そして、ここに Utils クラスがあります:
最後のステップ (マスター キーをカードに変更するための apdu の送信) で、例外 0x1E エラーを受け取りました。これは、完全性エラーを意味します:CRC または MAC がデータと一致しません。キーの変更を正しく実行するにはどうすればよいですか? それは私にとって必要です。ありがとう。
crc16 - C# CRC-16-CCITT 0x8408 多項式。助けが必要
私は通信プログラミングの初心者です。基本的に、CRC 出力に相当する 16 進数を取得する必要があります。パラメータである16進文字列があります-
これは、2 つの文字列の連結です。必要な出力はE6EB
inhex
または59115
inushort
です。Webで見つけたものに基づいてさまざまなアプローチを試みましたが、役に立ちませんでした。私が使用すべき多項式0x8408
はhttp://en.wikipedia.org/wiki/Polynomial_representations_of_cyclic_redundancy_checks[CRC-16-CCITT][1]
です。
このアプローチCRC_CCITT Kermit 16 in C#を試しましたが、出力が正しくありません。また、逆計算のために提案されたビットごとの演算子も試しました~
が、それでも失敗しました。
どんな助けでも大歓迎です。
java - C CRC16 に相当する Java
C
CRC16 メソッドをに変換する必要がありJava
ます。C
問題は、私がバイト操作が苦手なことです。
C
コード:
そして、それはそれを変換する私の試みです。それが正しいかどうかはわかりません。
質問: 私の Java への移植は正しいですか?
編集:
変更されcrc16
た作業方法 (素晴らしい回答に感謝):
これは Decimal 値を返します。また、CRC16 コードは 16 進数である必要があります。このメソッドを使用して、base 16 に変換しました。受信したcrc
ように実行しdec2m(crc, 16)
ます。
結果をテストするには、このサイトを使用できます(@greenaps に感謝)
c - crcsum への未定義の参照 (unsigned char const*、unsigned long、unsigned short)
Arduino スケッチに CRC16 を実装しようとしています。オンラインで crc.c ファイルを入手したので、試してみたいと思いました。crc.c を正しく実行できるように、他のファイルを作成しました。これが私のファイルです。
crc.h:
crc.c:
次のファイルで関数「crcsum」を呼び出します。
crc.ino:
問題は、次のエラーが発生することです。
crc.ino の関数呼び出しをコメント アウトすると、すべて正常にコンパイルされるため、ヘッダー ファイルと関数が正しく動作していることはわかっています。
このエラーが発生するのはなぜですか? オンラインで調べて、しばらく修正しようとしましたが、うまくいきませんでした。私の推測では、問題は関数のパラメーターにあるはずです。パラメータを調整してみましたが、だめでした。どんな入力でも大歓迎です。よろしくお願いします!