0

我使用这个 apdu 命令在智能卡中创建了一个文件:

String apdu = "90CD00000700000E0EA0000000"; channel.transmit(new CommandAPDU(DatatypeConverter.parseHexBinary(apdu)));

该文件已成功创建,但是我无法在该文件中写入数据,我尝试了以下命令: String apdu = "903D00003B00000000000034" + data + "00";

但它响应失败:sw1 91 sw2 BE(超出边界)

这个文件有什么问题?

4

1 回答 1

1

DESFire 命令使用little-endian 字节顺序

您的长度 ( 000034) 被解释为 3407872 字节。您需要使用34000052 来编码。

尝试更短的写入,例如:903D00000F00000000080000112233445566778800写入'1122334455667788'...

祝你好运!

编辑>

调整 APDU 和 WriteData 的 P3 中的长度以进行更长的写入,例如:

  • 903D0000 17 00000000 100000 00112233445566778899AABBCCDDEEFF00

请注意,DESFire 有一个帧大小限制,它限制了可以在单个命令交换中写入的字节数(对于 ISO 包装的 DESFire WriteData 命令,它大约是 47 个字节的数据)。您需要使用偏移量执行多次写入(记住小端编码)或使用附加帧机制 - 请参阅您的 DESFire 手册(后者稍快一些)。

于 2019-06-04T21:16:37.487 回答