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

时间:2011-12-08 18:14:11

标签: 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;
}

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

2 个答案:

答案 0 :(得分:6)

许多博客/论坛参赛作品都在讨论这个问题:

在我看来,VISA卡似乎“宽容”,但万事达卡不是(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节)。此链接也很有用:

答案 1 :(得分:-1)

基本上这个错误是因为您传递的命令不匹配。请检查(0x80)第一个字段是对还是错。在卡片中,OS OS检查第一个字段是否带有预期值如果不匹配则发送CLA未找到异常表示6E 00错误代码。 你需要提供更多关于你正在做什么的细节 - 卡,版本,GP合规性,你正在使用哪种技术的现有卡的列表。你在哪种语言中工作。(。net或java) 所以我可以帮助你。