使用 java smartcardio 函数发送 APDU 命令以将数据写入智能卡读卡器
Posted
技术标签:
【中文标题】使用 java smartcardio 函数发送 APDU 命令以将数据写入智能卡读卡器【英文标题】:Sending APDU commands to Write Data to a smartCard Reader using java smartcardio functions 【发布时间】:2020-08-19 05:00:46 【问题描述】:我正在尝试使用 java smartcardIO 函数将数据写入 HID Omnikey 5122 设备中的非接触式卡。
我需要插入卡片的数据是00 01 02 03
。
我试图通过 channel.transmit 函数发送的 APDU 命令是 FF D6 00 04 04 00 01 02 03
其中:
我无法通过以下函数正确构建 APDU 命令。有人可以帮我弄这个吗。我正在使用 java smartcardio 库中提供的函数。
ResponseAPDU respApdu = channel.transmit(
new CommandAPDU(0xFF,0xD6,0x00,0x04,0x04,
new byte[] (byte) 0x00,
(byte) 0x01,
(byte)0x02,
(byte)0x03));
我收到语法错误,例如构造函数命令的参数无效。
【问题讨论】:
欢迎来到 Stack Overflow。您能否将堆栈跟踪的错误消息粘贴给我们?还有一个完整的minimal, reproducible example 将帮助用户追踪您的问题。感谢您的合作! 【参考方案1】:您似乎正在尝试发送 UPDATE BINARY APDU 来更新偏移量 4 处的透明文件(这是您在 P1-P2 中提供的)。您必须使用 00h 的 CLA 字节(如果该文件操作不需要使用安全消息传递)。 由于 P1-P2 在您的情况下没有指定短文件标识符,因此您当前选择的文件具有
与 READ/UPDATE BINARY 命令兼容 文件大小 >=9 byres。【讨论】:
您能否告诉我,如何在下面的 APDU 调用中添加 00h 的 CLA 字节的信息。 ResponseAPDU respApdu = channel.transmit(new CommandAPDU(0xFF,0xD6,0x00,0x04,0x04, new byte[] (byte) 0x00, (byte) 0x01, (byte)0x02, (byte)0x03));跨度> 对不起 Suni,我把缩写弄混了。我使用 CLA 与 CLS 同义。 (0x00, 0xD6, ...)以上是关于使用 java smartcardio 函数发送 APDU 命令以将数据写入智能卡读卡器的主要内容,如果未能解决你的问题,请参考以下文章
使用 javax.smartcardio 时 DESfire EV1 为 PPS 命令包装 APDU 的问题
如何使用 smartcardio 和 Java 控制 ACR122 上的 LED?
带有 Java 9 和 ClassPath 的 javax.smartcardio