如何在 DESfire Ev1 卡上使用 ISO7816 选择命令?
Posted
技术标签:
【中文标题】如何在 DESfire Ev1 卡上使用 ISO7816 选择命令?【英文标题】:How to use ISO7816 select command with DESfire Ev1 card? 【发布时间】:2014-12-17 21:42:24 【问题描述】:我有一个 DESfire Ev1 1.3 版卡,我正在尝试使用 ISO7816 apdu 样式选择一个文件。
我有一个文件,在 A0 A1 A2
的帮助下,我可以使用本机或包装模式选择它:
本地人:
-> 5A A0 A1 A2
<- 00
包装:
-> 90 5A 00 00 03 A0 A1 A2 00
<- 91 00
但是,如果我尝试使用 ISO7816 样式选择它,我总是会收到文件未找到错误:
ISO7816:
-> 00 A4 04 00 03 A0 A1 A2 00
-> 6A 82
当使用 ISO apdu 时,AID 的格式是否不同?如何使用它来选择此 AID?
【问题讨论】:
欢迎来到 Stack Overflow!第一个问题很好;您简洁地描述了您的问题,添加了预期结果,提供了实际结果,并将范围缩小到仅重现问题的信息。 啊,谢谢 :) 我认为这是潜伏多年的影响 :) 【参考方案1】:来自文档:
此 APDU 通过它的 ISO 应用程序选择一个 ISO 应用程序 标识符 (AID)。 DESFire 的 ISO AID 是“0xD2 76 00 00 85 01 00”。 必须传输完整的 ISO AID,部分选择不是 支持的。 DESFire 不支持其他 ISO AID
这似乎与您拥有 AID 0xA0 0xA1 0xA2
的事实相矛盾。
看来你需要发送:
[CLA] [INS] [P1] [P2] [Len(AID)] [AID]
因此:
0x00 0xA4 0x04 0x00 0x07 0xD2 0x76 0x00 0x00 0x85 0x01 0x00
** 编辑 **
改用ISO SELECT DIRECTORY
:
这个 APDU 通过它的三字节 DESFire 选择一个 DESFire 应用程序 应用程序标识符 (DESFire AID)。 ...
ISO SELECT DIRECTORY 命令的功能是兼容的 使用原生 DESFire“选择应用程序”命令。
所以:
0x00 0xA4 0x04 0x00 0x03 0xA0 0xA1 0xA2
(这是在下一页上,可能是您最初想要的。)
我认为这与您所拥有的相同,只是减去了末尾的 NUL
。
【讨论】:
好吧,现在我很困惑。我使用了0xA0 A1 A2
,因为在 DESfire 中,文件必须具有三个字节长的 ID。所以CA A0 A1 A2 0F 01
创建了这个应用程序,我可以使用5A A0 A1 A2
进行选择。这个AID是指卡本身,那么呢? (它会自动选择主文件?)
这对我来说也很矛盾;该手册实际上说您必须对该 ID 进行硬编码(产品规范的第 72 页),并且该 ID 为 7 个字节。就好像您无法在 ISO 7816 模式下选择单个文件一样。
如果我不能选择单个文件,是否仍然可以在主文件中写入数据?我现在没有我的读者,但我会看看当我有它时我能做什么(明天)。
看看我的编辑;我认为您只需要在尝试结束时摆脱NUL
。
所以,如果我使用00 a4 04 00 07 d2 76 00 00 85 01 00
,它可以工作(回复90 00
),但如果我使用00 a4 04 00 03 a0 a1 a2
,它就不行。现在我必须弄清楚如何正确使用它。以上是关于如何在 DESfire Ev1 卡上使用 ISO7816 选择命令?的主要内容,如果未能解决你的问题,请参考以下文章
使用 javax.smartcardio 时 DESfire EV1 为 PPS 命令包装 APDU 的问题
javax.smartcardio:如何将本机命令发送到 Desfire 卡?