【问题标题】:Select Java Card Applet and return 0x61XX rather than 0x9000选择 Java Card Applet 并返回 0x61XX 而不是 0x9000
【发布时间】:2021-06-17 15:42:08
【问题描述】:

我希望我的 Java 卡小程序能够模拟我们组织中的旧版非 Java 卡(本机操作系统)。以下是小程序的目标行为:

  1. 选择小程序 (A4) 并返回 0x61XX。
  2. 使用 GET RESPONSE (C0) 读取响应

协议是 T1。

我的示例 java 卡来自与 JCRE 2.2.2 兼容的 NXP。在我的代码中,

//dataLen为10字节

如果(选择Applet()){ apdu.setOutgoing();

apdu.setOutgoingLength((short)dataLen);
apdu.sendBytesLong(data, (short)0, dataLen);
ISOException.throwIt((short)(ISO7816.SW_BYTES_REMAINING_00 + dataLen)

}

我将我的小程序加载到测试卡中。结果如下:

  1. 选择小程序 结果:0x610A

  2. 得到回应 结果:0x6982

这里可能有什么问题?如果使用 java 卡甚至可以实现这一点,那么正确的方法是什么?

【问题讨论】:

    标签: javacard


    【解决方案1】:

    我认为这是不可能的。 T=0 和 T=1 之间的差异由 Java 卡框架处理。 GET RESPONSE 特定于 T=0。

    这意味着使用 T=0 时会自动生成 61XX。当然,对于 INSTALL 的 SELECT 响应应该会自动返回 - 除非小程序抛出一个生成状态字的异常,在这种情况下它可能会被忽略。

    同样,我希望框架能够在您对它进行任何操作之前尽早捕捉到 GET RESPONSE。您唯一可以尝试的是自己处理 GET RESPONSE 并希望操作系统传递 APDU。

    但我认为最好的方法是将芯片配置为使用 T=0。那么 ISO case 4 命令(响应和命令数据)应该自动使用 GET RESPONSE。

    【讨论】:

    • 在那种情况下,看起来我必须获得一个启用了 T0 协议的 java 卡。目前我的测试卡只支持T1。感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多