2

我对获取响应命令感到困惑。我以为我知道,但实际上我不知道。

我想知道卡在案例4中返回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 小程序中实现 GET RESPONSE?
  4. 根据 T=0/T=1 卡实现的方法有什么不同?(我google的时候看到了关于T=0/T=1卡的信息,但我不明白。)

我希望任何相关信息的回复或URL。

4

1 回答 1

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 下面的层已经处理了这一点。此外,可能已经实现了扩展长度支持。

最后,卡当然应该返回9000或指示警告或错误的状态字,而不是61E8最后一个命令(这随后在问题中被修复为问题中的错误)。

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

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

在撰写本文时,当前版本为 2013(E)。它是付费软件(但谷歌不是)。

于 2014-07-14T08:15:38.203 回答