我正在使用 Omnikey 5321 阅读器与 Mifare DESFire EV1 标签进行通信。我想读取标准数据文件中的 40 个字节。我正在使用 Winscard DLL (c++) 将原生 desfire 命令包装在 ISO 7816 APDU 消息结构中。
应用程序选择和AES认证都OK。我有读取数据命令的问题。通信设置设置为 0x03(完全加密)。
APDU sended :
0x90 BD 00 00 07 01 00 00 00 28 00 00 00
我收到了 48 个数据字节和“0x9100”状态码。使用解密数据计算IV:
我先异或(0xBD 01 00 00 00 28 00 00 80 00 00 00 00 00 00 00)和AES认证后计算的子密钥2)。
然后我使用设置为 0x00 的 Init Vector 和会话密钥对结果进行加密。加密的数据被认为是IV。
我终于解密了用 IV 和会话密钥收到的 48 个数据字节。
I get :
40 data bytes + 4 CRC bytes + 4 padding bytes (0x00 00 00 00)
40 个数据字节有时是好的,但有时是错误的。我不知道为什么它并不总是相同的结果。解密的 CRC 总是相同的,填充也是如此。
当我尝试读取另一个文件中的纯数据时,我没有问题。所以我认为这是有问题的解密。但 CRC 和填充并不总是相同的。
一些帮助会非常有用