【问题标题】:Select by AID command is not working通过 AID 命令选择不起作用
【发布时间】:2015-07-02 07:50:52
【问题描述】:

我想重新开发新的桌面应用程序以从 EMV 智能卡读取信息,并且我有以前(工作)应用程序的日志

假设 EMV 智能卡中有 AID = 44 44 44 44 44 44 44 44 (DDDDDDDD) 的应用。

我正在发送 APDU 命令:00 A4 04 00 08 44 44 44 44 44 44 44 44 00 并收到超时异常(超时 = 60s)。

我尝试发送 APDU 命令:00 A4 04 00 08 44 44 44 44 44 44 44 44 并得到响应代码 = 61 37。

我尝试选择文件1PAY.SYS.DDF01,立即得到response = 6a82(没错)。

【问题讨论】:

    标签: smartcard apdu emv


    【解决方案1】:

    错误代码 61XX 表示您将在使用 Le=XX 调用 Get Response 命令后收到您的数据:

    例子:

    --> 00 A4 04 00 08 44 44 44 44 44 44 44 44
    <-- 61 37
    --> 00 C0 00 00 37
    <-- some data of length 0x37 and status code 90 00.
    

    相关问题: About Get Response command in javacard

    Oracle 文档:

    可能同时使用多个 APDU 连接打开 同一张卡的不同逻辑通道。然而,由于 APDU 协议是同步的,命令和命令不能交错 它们跨逻辑通道的响应 APDU。收货之间 命令 APDU 以及向该命令发送响应 APDU, 只有一个逻辑通道处于活动状态。对于 T=0 协议,对于情况 4 和 情况 2 命令 APDU 卡可能会以“61 XX”或“6C XX”响应。 这些特殊情况必须由 方式如下:

    '61 XX':在发送任何其他命令之前,实现必须向卡发送 GET RESPONSE 以获取响应数据。 '6C XX':在设置 Le 等于从卡接收到的 XX 之后,实现必须重新发送命令,然后再发送任何其他命令 已发送。

    在上述两种情况下,实施必须确保 在发送命令 APDU 和接收状态字“61 XX”之间 或“6C XX”,并发送 GET RESPONSE 或重新发送命令 APDU Le 分别设置为 XX,不得有任何其他 APDU 在与卡的任何逻辑通道上交换。如果状态字 从卡中连续多次收到“61 XX”,则 实现必须累积从接收到的所有响应数据 卡,然后将其返回给 J2ME 应用程序。 J2ME 应用程序 必须忽略上述交流,并且只应 获取由于上述操作而收到的响应。

    【讨论】:

    • 或者非常简洁:这是 T=0 协议,你必须显式获取卡片响应,并注明长度。
    • @guidot 你能提供更多细节吗?
    • @vojta 我试过你的例子,但在 00 C0 00 00 37 之后出现超时异常。
    • 半双工与T=1没有区别;最重要的区别是面向字符(T=0)与面向块(T=1)。 Get Response 看起来不错(请参阅 ISO 7816-3 了解 T=0 协议,参阅第 4 部分了解 Get Response 命令)。超时而不是错误状态肯定表明存在非常低级别的错误。
    • 不认识的读者;如果您使用的是 Java:一个可能的陷阱是您自己编写 LC 字节(08 在 44..44 之前)。 Java 自己从命令数据字段的字节数组中计算并添加它。
    【解决方案2】:

    我将库从 RXTXserial 更改为 JSSC,它解决了我的问题。现在我得到没有 GET RESPONSE 请求的响应。谢谢各位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多