gpt4 book ai didi

java - 通过 USB 错误 : PROCEDURE BYTE CONFLICT 的 Android 智能卡读卡器

转载 作者:行者123 更新时间:2023-11-30 00:39:40 25 4
gpt4 key购买 nike

我正在使用通过 USB 连接到 Android 设备的 GEMALTO IDBRIDGE K30。

首先,我将像这样发送一条 PC_to_RDR_IccPowerOff 消息。

byte[] data= new byte[]{
(byte) 0x62,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00, (byte) 0x00};


UsbInterface intf = _usbDevice.getInterface(0);
UsbEndpoint outputEndpoint = intf.getEndpoint(1);
UsbEndpoint inputEndpoint = intf.getEndpoint(0);
intf.getEndpointCount();
UsbDeviceConnection connection = _usbManager.openDevice(_usbDevice);

connection.claimInterface(intf, forceClaim);

//activate card for apdu
final int dataTransferred = connection.bulkTransfer(inputEndpoint, data, data.length, TIMEOUT);

Log.e(SIGNATURE_LOG, String.format("Written %s bytes to the dongle. Data written: %s", data.length, byteArrayToHexArrayString(data)));

作为回应我得到

收到的消息长度为 64,内容为:[80, 18, 00, 00, 00, 00, 00, 00, 00, 00, 3B, DF, 18, 00, 81, 31, FE, 58, 80, 31, 90, 52, 41, 01, 64, 05, C9, 03, AC, 73, B7, B1, D4, 44, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00]

在此之后,我等待 5 秒,然后尝试使用 PC_to_RDR_XfrBlock 发送 APDU Select 命令。

byte[] data2= new byte[]{
(byte) 0x6F,
(byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00,
(byte) 0x01,
(byte) 0x00,
(byte) 0x00, (byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x0C,
(byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00,
(byte) 0x07, (byte) 0xA0, (byte) 0x00, (byte) 0x00,
(byte) 0x01, (byte) 0x18, (byte) 0x45, (byte) 0x4E,
(byte) 0x15,};

作为响应,我得到了一个错误 F4,描述为 PROCEDURE BYTE CONFLICT:

收到的消息长度为 64,内容为:[80, 00, 00, 00, 00, 00, 01, 40, F4, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00]

有人能帮帮我吗?我不明白我做错了什么。

最佳答案

PROCEDURE BYTE CONFLICT 错误有点棘手,因为它发生在阅读器的固件内部,并通过 CCID 上报给您。基本上,这意味着读卡器通过 T=1 协议(protocol)与智能卡对话,并且读卡器和智能卡之间未正确接收或发送某些 T=1 程序字节。在我看来,您在申请中无能为力。你可以做什么:

  • 如果您的智能卡支持 T=0 协议(protocol),请尝试执行它
  • 将您的阅读器更新到最新固件
  • 也许你的智能卡坏了,换一张相同类型的(或更新版本的)试试

  • 还有 here它指出有时某些 USB 端口可能会出现问题。尝试将您的阅读器连接到 Android 设备的 USB 集线器。

更新

您的智能卡读卡器GEMALTO IDBRIDGE K30 报告TPDU 交换级别(参见here)。由于在 TPDU 交换级别,所有发送到读卡器的数据都按原样转发到智能卡,因此您必须在软件中处理 T=1 协议(protocol)。通常驱动程序会处理此任务,但在您的情况下,您直接与 USB 级别的智能卡读卡器通信。所以中间没有驱动程序。所以你将不得不在你的代码中自己实现和处理 T=1 协议(protocol),或者找到一个现有的 Java 实现。 ISO-7816-3 是定义 T=1 协议(protocol)的标准。不幸的是,它不是免费的,所以我无法提供它的链接(尝试谷歌搜索)。您可以在开源 Linux CCID driver 中找到 C 语言的 T=1 协议(protocol)的现有实现。 .

如果您未绑定(bind)GEMALTO IDBRIDGE K30阅读器,您可以获取其他具有extended APDUshort APDU exchange level 的阅读器.在这些情况下,您不必关心软件中的协议(protocol)。

关于java - 通过 USB 错误 : PROCEDURE BYTE CONFLICT 的 Android 智能卡读卡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42738790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com