7

我正在编写一个智能卡应用程序,并在成功选择应用程序及其 AID 后,当它开始发送获取处理选项时

我得到 6E 00 作为响应 - 无效的 CLA 命令。这是发送命令和接收响应的代码的一部分:

ResponseAPDU rapdu = sendCommand(new byte[]{(byte)0x80, (byte)0xA8, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x83, (byte)0x00, (byte)0x00});

private ResponseAPDU sendCommand(byte[] apdu) throws CardException{
    CommandAPDU capdu = new CommandAPDU(apdu);         
    ResponseAPDU rpd = channel.transmit(capdu);

    return rpd;
}

我正在使用相同的命令来使用 Jaccal 库读取卡,它工作得很好,但只是 jaccal 不适合我的应用程序,因为它使用了外部 dll 文件。我不知道为什么它会给我这样的回应。

4

2 回答 2

6

许多博客/论坛条目讨论了这个问题:

在我的情况下,VISA 卡似乎是“宽容的”,但万事达卡不是(6E 00)。请注意,与建议相反,升级到 Java 7 并没有为我解决这个问题。您可能正在查看 sun.security.smartcardio.t0GetResponse 解决方案并处理响应。

我做了以下工作来让它工作:

System.setProperty("sun.security.smartcardio.t0GetResponse", "false");

使用 GET RESPONSE 处理响应(参见 EMV 4.3 Book 1,Section 9.3.1.3)。这个链接也很有用:

于 2012-04-18T17:19:50.620 回答
-1

基本上这个错误是因为你传递的命令不匹配。只需检查(0x80)第一个字段是对还是错。在卡中,卡操作系统检查第一个字段是否具有预期值,如果它不匹配它发送 CLA Not Found 异常表示 6E 00 错误代码。您将需要提供有关您正在做什么的更多详细信息 - 什么卡、版本、GP 合规性、现有卡的列表您正在使用哪种技术。您正在使用哪种语言工作。(.net 或 java)以便我能帮你。

于 2012-02-21T08:38:09.503 回答