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