微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择 Java Card Applet 并返回 0x61XX 而不是 0x9000

如何解决选择 Java Card Applet 并返回 0x61XX 而不是 0x9000

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

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

协议是 T1。

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

//dataLen 为 10 字节

if (selectingApplet()){ 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 卡甚至可以做到这一点,那么实现这一目标的正确方法是什么?

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。