Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class (Javacard)APDU命令的类错误测试';选择文件&x27;_Class_Javacard_Apdu - Fatal编程技术网

Class (Javacard)APDU命令的类错误测试';选择文件&x27;

Class (Javacard)APDU命令的类错误测试';选择文件&x27;,class,javacard,apdu,Class,Javacard,Apdu,那里 我不明白为什么“类不受支持”错误没有发生 首先,我的源代码和APDU命令如下 package SelectFileTest; import javacard.framework.*; public class SelectFileTest extends Applet{ public static void install(byte[] bArray, short bOffset, byte bLength) { new SelectFileTest(bArra

那里

我不明白为什么“类不受支持”错误没有发生

首先,我的源代码和APDU命令如下

<源代码>

package SelectFileTest;
import javacard.framework.*;

public class SelectFileTest extends Applet{
    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new SelectFileTest(bArray, bOffset, bLength);
    }   
    private SelectFileTest(byte bArray[], short bOffset, byte bLength){     
        register();
    }

    public void process(APDU apdu){
        byte buf[] = apdu.getBuffer();
        if (buf[1]==(byte)0xA4) {       
            if((buf[0]&0xff)!=0x00)                         // Class Check (Question)
                ISOException.throwIt((short)0xfff5);

            if(selectingApplet()) 
                {   }
            else
                ISOException.throwIt((short)0xffff);        // 6881
        }
        return ;
    }
}

[Card-1C] <== 00 A4 04 00 07 A0000000031234
[Card-1R] ==> 9000
[Card-2C] <== 00 A4 00 00 02 F801
[Card-2R] ==> FFFF                              // Expected
[Card-3C] <== 01 A4 00 00 02 F801
[Card-3R] ==> 6881                              // (Question) Expect the SW 'FFF5'
[Card-4C] <== 08 A4 00 00 02 F801
[Card-4R] ==> FFF5                              // Expected
[Card-1C]9000
[Card-2C]FFFF//应为
[Card-3C]6881/(问题)除软件“FFF5”外
[Card-4C]FFF5//应为
根据命令3和4,卡必须输出SW“FFF5”,因为源代码中有行“Class Check”。但是,它在CLA=01~07时输出6881(3R)(可能通过JCRE)

我知道,一旦选择了小程序,JCRE就会将所有后续APDUs命令转发给所选的小程序。因此,我认为第三个响应(3R)也像4R一样是“FFF5”。我不明白,在我的代码中找不到我的错误


我希望你能提出宝贵的意见。提前感谢。

在CLA字节中,逻辑通道用低位表示。您正在选择一个逻辑通道,然后平台会尝试将其发送到正确的小程序。但是,除了基本通道(ID=0)外,它将找不到任何开放通道。因此,平台将处理错误,而不是小程序。这发生在小程序接收APDU之前;小程序将不会得到通知

请注意,
INS:MANAGE频道也可能发生这种情况。我可能不必解释,selectbyaid最初也是由运行时环境处理的


有关逻辑通道及其使用方法的更多信息,请参见ISO/IEC 7816-4。

事实上,由于我在代码中设置了类字节,我曾经遇到过这个问题。。。由于我的类字节,我的命令被中止,并给出我不期望的结果

在发送到卡之前,您需要解码类字节的含义。ISO 7816-3和-4将有助于准确解码您的类字节


希望它能帮助…

事实上,我希望我的小程序一旦被选中,就能处理所有命令和错误代码。那么,你有办法让我的小程序输出FFF5吗?@user2642459 CLA字节的低位在将APDU发送到小程序之前由平台进行解释。这就是为什么您的小程序只能使用正确的逻辑通道(CLA字节的其余部分都是您的)。(上面的问题相同)实际上,我希望我的小程序在被选中后处理所有命令和错误代码。那个么,你们有办法让我的小程序输出FFF5吗?当向java卡发送命令时,它首先由JCRE处理,然后将命令传递给Process方法。在JCRE返回此错误的情况下,当JCRE找到适合将其移动到处理方法的命令时,您将得到您的集合SW1SW2。6881:函数不受支持-逻辑通道不受支持/打开,您也可以在此处检查-,它与您得到的相同错误有关。