Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Java me 在卡和终端之间生成安全通道_Java Me_Smartcard_Javacard - Fatal编程技术网

Java me 在卡和终端之间生成安全通道

Java me 在卡和终端之间生成安全通道,java-me,smartcard,javacard,Java Me,Smartcard,Javacard,我想在卡和终端之间生成安全通道。这是我的代码: final static byte INIT_UPDATE = (byte) 0x50; final static byte EXT_AUTHENTICATE = (byte) 0x82; SecureChannel sc; public void process(APDU apdu) throws ISOException { if (selectingApplet()) {

我想在卡和终端之间生成安全通道。这是我的代码:

    final static byte INIT_UPDATE       = (byte) 0x50;
    final static byte EXT_AUTHENTICATE  = (byte) 0x82;
    SecureChannel sc;

    public void process(APDU apdu) throws ISOException {
        if (selectingApplet()) {
        return;
        }
       byte[] buffer = apdu.getBuffer();
         short inlength = 0;

        try
        {
        switch (buffer[ISO7816.OFFSET_INS]) {

       case INIT_UPDATE:
             case EXT_AUTHENTICATE:
                    makeSecureChannel(apdu);
                break;
     }   
  catch (CryptoException e) 
     {
           short r = e.getReason();
          ISOException.throwIt(r);
      }
}

当我发送命令时
80 50 20 00 08 01 15 6A 2A F5 64 87 CF
我得到错误
6a88
,当我发送命令时
00 50 20 00 08 01 15 6A 2A F5 64 87 CF
我得到错误
6e00

每个人都能帮我吗?

Statusword
6E00
不是很有趣。这意味着您发送的CLA(类)字节不正确。这是因为初始化更新在ISO7816中没有定义,所以它是一个专有命令。专有命令必须设置其专有位。因此,类字节
80
是唯一正确的


另外,让我们关注INIT UPDATE的响应:
6A88
<代码>6A88表示“未找到参考数据”。这可能意味着P1和P2引用的键不匹配。将P1和P2都置于
00
以确保自动选择密钥(如果要明确选择P1中的密钥版本,请检查响应数据中的“密钥信息”)

能否将错误定位到特定的代码行?你能调试吗?您确定您的卡支持此全局平台API调用吗?在发送APDU命令之前,您是否选择了小程序?您的卡上是否设置了密钥版本==0x20的密钥?如果否,则将0x20替换为0x00。
    private void makeSecureChannel(APDU apdu) 
{

    byte[] buf = apdu.getBuffer();
    byte cla = buf[ISO7816.OFFSET_CLA];
    byte ins = buf[ISO7816.OFFSET_INS];

    try
    {
    apdu.setIncomingAndReceive();
    if(ins == INIT_UPDATE)
    {
        sc = GPSystem.getSecureChannel();     
    }

    short len = sc.processSecurity(apdu);

    apdu.setOutgoing();
    apdu.setOutgoingLength(len);
    apdu.sendBytes(ISO7816.OFFSET_CDATA, (short) len);   
    }
    catch(APDUException ex1)
    {
        ISOException.throwIt(ex1.getReason());
    }     
}