Java SmartCard IO上的奇怪无效CLA命令(6E 00)

Ola*_*obi 7 smartcard javacard

我正在编写一个智能卡应用程序,并在成功选择带有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;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用相同的命令使用Jaccal库读取卡片并且它工作正常,但由于它使用了外部dll文件,因此jaccal不适合我的应用程序.我不知道为什么它会给我这种回应.

Cor*_*her 6

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

在我看来,VISA卡似乎是"宽容的",但万事达卡不是(6E 00).注意,与建议相反,升级到Java 7并没有解决它.您可能正在查看sun.security.smartcardio.t0GetResponse解决方案并处理响应.

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

System.setProperty("sun.security.smartcardio.t0GetResponse", "false");
Run Code Online (Sandbox Code Playgroud)

使用GET RESPONSE处理响应(参见EMV 4.3第1册,第9.3.1.3节).此链接也很有用:


Sac*_*n D -1

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