smartcard - DESFire 写入数据命令失败,出现 917E(长度错误)

标签 smartcard rfid mifare apdu contactless-smartcard

我在使用 MIFARE DESFire 时遇到了一个非常奇怪的问题。当我写入少量数据(例如11字节)时,写入操作成功。然而,当我尝试写例如50字节,响应为917E,说明命令存在长度问题。

尝试写入11个字节:

<-- 90 3D 00 00 12 01 000000 0B0000 1234567890AABBCC DDEEFF 00
--> 9100 (success)

尝试写入 50 个字节:

<-- 90 3D 00 00 39 01 000000 320000 1234567890AABBCC DDEE1234567890AA
                                    BBCCDDEE12345678 90AABBCCDDEE1234
                                    567890AABBCCDDEE 1234567890AABBCC DDEE 00
--> 917E (length error)

最佳答案

该错误表明您的命令太长。您可能使用 DESFire EV1,它仅支持最大 55 字节的包装 APDU 长度。因此,当以包装 native 模式打包到单个 APDU 中时,WriteData 命令的最大数据长度为

55 - APDU Header - APDU Lc - File ID - Offset - Length - APDU Le =
55 - 4           - 1       - 1       - 3      - 3      - 1       = 42 bytes.

由于 APDU 包装,该值略小于 WriteData 命令本身的限制。请注意,您仍然可以通过将数据拆分到多个 DESFire 帧(使用 0xAF 状态和命令代码),在一个 WriteData 命令中发送(更多)更多数据。

更新

DESFire EV1 数据表中提到了 55 个字节。实际测试vikky据透露,这实际上可能是 60 字节(导致最大数据长度为 47 字节)。

关于smartcard - DESFire 写入数据命令失败,出现 917E(长度错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48220818/

相关文章:

rfid - Mifare 更改 KEY A 和 B

javascript - 在 Node.JS 中刷新缓冲区数据

permissions - Mifare 访问条件计算

format - MIFARE Classic 1K - ATQA 尺寸?

smartcard - 当 T=0、Lc>0、Le>0 时,智能卡是否返回 sw=9000?

ios - 获取当前登录用户的 Sharepoint 用户详细信息? (SOAP API)

java - 使用我们自己的 android 应用程序在 MifareClassic 卡上写入

mifare - PN532 仿真模式认证失败

cross-browser - 从通用浏览器访问智能卡的架构?或 : How to bridge the gap from browser to PC/SC stack?

java - 如何使用 Java 从 Windows (MSCAPI) 上的智能卡获取用户身份?