7

非接触 EMV カードに送信される、正しくフォーマットされた GET PROCESSING OPTIONS コマンドを作成しようとしています。この投稿は非常に役に立ちましたが、もう少し詳しく知る必要があります。

PDOL を解析するとき、各タグの長さが 2 バイトで、その後に返されるデータのサイズが続くと想定しても安全ですか?

たとえば、PDOL9F66049F02069F37049F1A02は 、 などに分割され 9F66 049F02 06それぞれに 2 バイトのタグと、予想されるデータ値の長さの 1 バイトが含まれます。

解析時に各タグの長さが 2 バイトであると想定しても安全ですか?

4

1 に答える 1

10

いいえ、各タグが 2 バイトで構成されているとは期待できません (ただし、ほとんどのタグはそうです)。EMV のタグ長値 (TLV) 構造は、ASN.1 エンコード規則 (基本エンコード規則、BER) に従います。詳細については、次のドキュメントを参照してください。

後者は、私が始めるのに役立つ本当に良い紹介です.

TLV 構造 (データ オブジェクト) は、タグ値、長さの値、およびデータ ペイロード (値) で構成されます。

+----------+-----------+-----------+
| | タグ | 長さ | 値 |
| | (N バイト) | (M バイト) | (L バイト) |
+----------+-----------+-----------+

PDOL (およびその他のデータ オブジェクト リスト、DOL) には、1 つまたは複数のそのようなデータ オブジェクトのタグと長さの部分が含まれます。同様に、PDOL 関連データには、PDOL で参照される DO の値の部分が含まれます。タグと長さの部分はどちらも、1 バイト以上で構成できます。

タグ部分については、ルールは次のようになります (詳細については、上記の参照を参照してください)。

  • 最初のタグ バイトの下位 5 ビットがすべて 1 の場合 ( tag[0] & 0x01F == 0x01F)、タグは少なくとも 2 バイトで構成されます。
  • 次のタグ バイトの上位ビットが 1 ( tag[i] & 0x080 == 0x080) の場合、タグはもう 1 バイトで構成されます。これは、後続の各バイトに対して繰り返されます。

長さの部分については、ルールは次のようになります (詳細については、上記の参照を参照してください)。

  • 最初の長さバイトの上位ビットがゼロの場合 ( length[0] & 0x080 == 0)、残りの 7 ビットは長さの値をエンコードします ( length[0] & 0x07F)。
  • 最初の長さバイトの上位ビットが 1 の場合 ( length[0] & 0x080 == 0x080)、残りの 7 ビットは長さ部分の残りのバイト数をエンコードします ( length[0] & 0x07F)。残りのバイトは、MSB ファーストの符号なし整数として長さの値を表します。
于 2015-12-30T10:05:37.537 に答える