如何在 0x6310 状态后从 JavaCard 获取更多数据?

Posted

技术标签:

【中文标题】如何在 0x6310 状态后从 JavaCard 获取更多数据?【英文标题】:How to get further data from JavaCard after 0x6310 status? 【发布时间】:2017-01-06 14:43:07 【问题描述】:

我正在尝试在 Java 卡上列出小程序/包。我使用以下 APDU 命令来获取列表:

80 F2 E0 00 02 4F 00 00

该命令返回状态字0x61xx,所以我发送一个获取xx字节的GET RESPONSE命令:

00 C0 00 00 XX

这给了我xx 数据字节和状态字0x6310(“更多可用数据”)。我接下来应该发送什么来接收状态字所指示的进一步数据?

APDU 跟踪:

[发送] 80 F2 E0 00 02 4F 00 00 [接收] 61 F2 [发送] 00 C0 00 00 F2 [接收] 63 10 [发送] ???

【问题讨论】:

好吧,也许您没有收到所有字节?卡片可能返回更少的字节,Ne 是响应数据的最大量。如果您没有立即成功,请再试一次。 一些 APDU 跟踪会很好 [SEND] 80 F2 E0 00 02 4F 00 00 [RECEIVE] 61 F2 [SEND] 00 C0 00 00 F2 [RECEIVE] F2 字节的数据和结果 63 10 [SEND] ??跨度> F2 指令在哪里定义?类字节 80 表示专有命令,因此 ISO 7816 在这里没有太多帮助... 小程序/包列表的命令。要知道我的 Applet/Package 已经安装了。也许你知道更好的命令? 好吧,我个人会尝试使用 T=1 进行通信,绝对不是 T=0(您似乎使用它,因为这是一个 GET RESPONSE 命令)。此外,全球平台的状态词在全球平台卡规范中,并且可以在线免费获得(注册后)。你已经看过规格了吗? 【参考方案1】:

查看您在问题中显示的命令/响应序列以及您列出小程序/包的事实,我认为这是关于 GlobalPlatform 卡管理的。

您使用的命令 (INS = 0xF2) 是 GET STATUS 命令。 P1 = 0xE0 表示要列出颁发者安全域、应用程序(包括安全域)和可执行加载文件。 P2 = 0x00 表示您要获取第一个或所有匹配项(即您要开始搜索)。

然后您将获得 0xF2 数据字节以响应该命令。状态字“6310”由 GP 卡规范定义,表示有更多数据可用。因此,您需要重复 GET STATUS 命令,直到收到无错误 ('9000') 状态字。要在出现“6310”警告条件后重复 GET STATUS 命令,您需要将 P2 更改为 0x01 以指示您想要获取下一个事件。因此,为了响应收到状态字“6310”,您将发出以下命令:

80 F2 E0 01 02 4F 00 00

【讨论】:

以上是关于如何在 0x6310 状态后从 JavaCard 获取更多数据?的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 硬刷新后从输入中重置状态值。如何解决?

解锁后无法在 JavaCard 中列出或安装 CAP 文件。为啥?以及如何解决?

主机应用程序如何在 Netbeans 中的模拟智能卡上查询 javacard 小程序?

如何从 Javacard 制作 EMV 卡?

如何与同一物理智能卡上的多个 javacard 应用程序交互(如 yubikey)

如何在 Swift 中 3 秒后从 AppDelegate 中删除FromSuperview