【问题标题】:Sending APDU commands to Write Data to a smartCard Reader using java smartcardio functions使用 java smartcardio 函数发送 APDU 命令以将数据写入智能卡读卡器
【发布时间】: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} 其中:

  • FF 是 CLS
  • D6 是 INS
  • 00 是 P1
  • 04 是 P2
  • 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 将帮助用户追踪您的问题。感谢您的合作!

标签: java apdu smartcardio


【解决方案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, ...)
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2020-01-19
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多