我使用此 apdu 命令在智能卡中创建了一个文件:
String apdu = "90CD00000700000E0EA0000000";
channel.transmit(new CommandAPDU(DatatypeConverter.parseHexBinary(apdu)));
该文件已成功创建,但是我无法在该文件中写入数据,我尝试了以下命令: String apdu = "903D00003B00000000000034" + data + "00";
但它失败并显示响应:sw1 91 sw2 BE(超出边界(
这个文件有什么问题?
DESFire 命令使用小端字节顺序。
您的长度(000034
(被解释为3407872字节。您需要使用 340000
对 52 进行编码。
尝试较短的书写方式,例如:903D00000F00000000080000112233445566778800
写"1122334455667788"...
祝你好运!
编辑
>调整 APDU 和 WriteData 的 P3 中的长度以进行较长的写入,例如:
- 903D0000 17 00000000
- 10000000112233445566778899AABBCCDDEEFF00
请注意,DESFire 有一个帧大小限制,它限制了可以在单个命令交换中写入的字节数(对于 ISO 包装的 DESFire WriteData 命令,它大约是 47 字节的数据(。您需要使用偏移量执行多次写入(记住 litte-endian 编码(或使用附加帧机制 - 请参阅您的 DESFire 手册(后者略快(。