Java智能卡IO上出现奇怪的无效CLA命令(6E 00)

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文件,所以它并不适用于我的应用程序。我不知道为什么会出现这种响应。

2个回答

6
许多博客/论坛文章都讨论了这个问题: 在我的案例中,VISA 卡似乎是“宽容”的,但 MasterCards 不是(6E 00)。请注意,与建议相反,我升级到 Java 7 后问题仍未解决。您可能会看到 sun.security.smartcardio.t0GetResponse 的解决方案并处理响应。
以下是我所做的来使其工作:
System.setProperty("sun.security.smartcardio.t0GetResponse", "false");

使用GET RESPONSE处理响应(请参阅EMV 4.3书1,第9.3.1.3节)。此链接也很有用:

(注: EMV是一种智能卡技术,用于处理信用卡和借记卡交易.)

Java 8仍需要此修复。 - Jonathan Rosenne

-1

基本上,这个错误是因为你传递的命令不匹配。只需检查(0x80)第一个字段是否正确或错误。在卡片操作系统中,如果第一个字段与预期值不匹配,则会发送CLA未找到异常,表示6E 00错误代码。 您需要提供更多有关您正在进行的工作的详细信息 - 使用哪张卡、版本、GP合规性、现有卡的列表以及您使用的技术语言(.net或java)。 这样我才能帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接