有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何验证Java卡上是否已安装小程序

我正在写一个程序,一旦卡插入读卡器,它就可以自动上传一个applet

我已经完成了这一部分,我希望在再次尝试安装之前能够验证小程序是否已经安装在卡上。 我正在使用javax.smartcardio

这是我认为我应该用来发送命令的:

            Card card = terminal.connect("T=0");
            CardChannel channel = card.getBasicChannel();
            ResponseAPDU resp = channel
                                .transmit(new CommandAPDU());

但是我不知道如何使用may applet的帮助发送命令。 我的小程序的帮助是01020304050607080900


共 (1) 个答案

  1. # 1 楼答案

    每个小程序都有一个唯一的辅助(应用程序标识符)。您可以使用GlobalPlatform GET STATUS命令列出所有已安装的应用程序,但最简单的方法是只执行一个SELECT命令。如果安装了小程序,SELECT命令将返回一个以9000作为状态字结尾的响应。6a82表示“未找到文件”-表示未找到文件,即未安装小程序

    命令是:

    00A40404 <AID length> <your AID>
    
    byte[] aid = {(byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, (byte)0x05, (byte)0x06, (byte)0x07, (byte)0x08, (byte)0x09, (byte)0x00};
    ResponseAPDU resp = channel
                                    .transmit(new new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0xFF));
    if (resp.sw == 0x9000) {
    // applet is already installed
    }
    

    请注意,如果小程序安装失败,将只安装程序包,小程序将不会实例化,也无法通过这种方式检测到,但我假设您已经在安装过程中处理了此问题

    另一种选择是让安装发生,通常安装过程中报告的错误是0x6A89,这意味着“文件已经存在”