java - 将数据写入 StdData 文件中的智能卡

标签 java smartcard apdu smartcardio

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

字符串 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 个字节的数据)。您需要使用偏移量执行多次写入(记住小端编码)或使用附加帧机制 - 请参阅您的 DESFire 手册(后者稍微快一些)。

关于java - 将数据写入 StdData 文件中的智能卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56443411/

相关文章:

java - 读写EMV卡

java - 滚动RecyclerView时Cardview的数据发生变化

java - CGI 和 Servlet 的执行方式有何不同?

javax.smarcardio 未知异常 0x1f

java - 使用 sunpkcs#11 和 tomcat 移除和插入智能卡

javax.smartcardio - javadocs

java - APDU 命令异步调用

java - 使用 Spring 进行 session 复制会导致 NotSerializedException

java - 在 Netbeans 中成功发送通知后如何获得 Firebase 响应?

java - 在 Jcard 上部署 javacard 小程序