【发布时间】:2013-10-25 12:11:17
【问题描述】:
使用 Nexus 4 和最新的 Android API 级别 18 与 Mifare DESFire EV1 AES 标签通信让我很头疼。为了写入和读取此类标签,遵循 NXP 原生协议,必须遵循以下步骤:
- 选择应用程序
- 认证
- 写或读
为此,我使用 Android 的 IsoDep 类,该类提供对 ISO 14443-4 属性和 I/O 操作的访问。非常奇怪的是,一旦我发送了 select application native 命令,我就会得到一个意想不到的响应。假设我有 AID F4013D 所以我发送:
-> 5AF4013D
<- 6E00
所有可能的响应都必须是一个字节长度(成功0x00 或error_code),不能是两个或更多。因此,成功响应之前的0x6E 绝对出乎意料。它并不总是发生,当它没有发生并且工作正常时,选择应用程序和身份验证过程工作正常。但是,一旦经过身份验证,写入命令的行为不正确,所有写入命令都会以来自 PICC 的0xAF 而不是成功的0x00 结束。 PICC 似乎在不应该期望一些额外的数据时(我发送了正确长度的有效负载)。如果我发送任何其他命令,我会收到 0xCA(命令中止)错误代码。
-> 5AF4013D
<- 00 /*Success*/
-> AA01
<- AFA8394ED57A5E83106B4EE72FD2BB0CC4
-> AF148F525E1DDE0AD6AB60B4B615552475C91F2E8D89B8523E4465113DD5BD19C6
<- 0066D255C93F2F492AFE3715C88964F1BD /*Authentication success*/
-> 3D02000000030000222222 /*Write 3 bytes to file nº2*/
<- AF /*Unexpected, 0x00 was expected*/
正常情况下,如果我使用个人阅读器(非 Android NFC)发送这些类型的命令,它总是可以正常工作。 Android NFC API 中的某些东西似乎变得很奇怪,它应该只是一个从不解释或修改数据的原始数据传输器。
我也尝试过使用 ISO 7816-4 APDU 结构,结果相同。出于好奇,使用 Galaxy Nexus 不会发生选择应用程序的奇怪响应,但总是会出现写入命令。
【问题讨论】:
标签: android nfc mifare apdu contactless-smartcard