关于在javacard中获取响应命令

时间:2014-07-12 08:50:18

标签: javacard apdu getresponse

我对Get Response命令感到困惑。我以为我知道但实际上我不知道。

我想知道卡在这种情况下返回1000字节数据的机制。我猜这个命令如下。如果错误,请告诉我正确的。

(Card) <== [CLA] [INS] [P1] [P2] [Lc] [Data] [Le] // response data size is 1000 bytes
(Card) ==> 6100

(Card) <== 00 C0 00 00 00
(Card) ==> [Data(256)] 6100

(Card) <== 00 C0 00 00 00
(Card) ==> [Data(256)] 6100

(Card) <== 00 C0 00 00 00
(Card) ==> [Data(256)] 61E8

(Card) <== 00 C0 00 00 E8
(Card) ==> [Data(232)] 9000 (61E8 was my mistake)

问题

  1. 以上APDU是否正确?
  2. 第一个命令中的[Le]是什么?
  3. 如何在java applet中实现GET RESPONSE?
  4. 如何根据T = 0 / T = 1卡实现不同的方法? (当我用Google搜索时,我看到有关T = 0 / T = 1卡的信息,但我不明白。)
  5. 我希望相关信息的任何回复或网址。

1 个答案:

答案 0 :(得分:4)

回答你的问题:

  1. 除了(2)和最后的评论外,对我来说似乎很正确;
  2. 你不发送T = 0的Lc和Le字段,在案例4命令(命令数据和响应数据)中只发送Lc并发送命令数据 - 你也可以说Le是空的因为它是以字节为单位的编码;
  3. T = 0由Java Card OS处理,您不必自己实现;
  4. T = 1不使用或不需要GET RESPONSE,因为T = 1和T = CL都是更高级别的协议 - APDU下面的层已经处理了这个问题。此外,可能已经实施了扩展长度支持。
  5. 最后,卡片当然应该返回9000或者表示警告或错误的状态字,而不是61E8用于最后一个命令(这个问题随后被解决为问题中的错误)

    请注意,您应该盲目地假设响应将包含请求的字节数。例如,值为00的Le字节表示最大响应大小为256字节。

    这些都在ISO / IEC 7816-4第5.3.4章:响应链中定义

    目前的版本是2013年(E)。它的付费软件(但谷歌不是)。