【问题标题】:How to use ISO7816 select command with DESfire Ev1 card?如何在 DESfire Ev1 卡上使用 ISO7816 选择命令?
【发布时间】: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!第一个问题很好;您简洁地描述了您的问题,添加了预期结果,提供了实际结果,并将范围缩小到仅重现问题的信息。
  • 啊,谢谢 :) 我认为这是潜伏多年的影响 :)

标签: nfc smartcard mifare


【解决方案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,它就不行。现在我必须弄清楚如何正确使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多