Java智能卡发送命令

Java智能卡发送命令,java,smartcard,apdu,Java,Smartcard,Apdu,我对Java卡编程相当陌生。我在基础知识方面遇到了一些问题 我创建了以下脚本: echo "Key APDU"; send 0x84 0x20 0x00 0x00 0x40 0x2B 0x57 0xC0 0x2F 0x3C 0x25 0x36 0x61 0xF7 0x85 0x57 0x55 0x4B 0xAA 0x86 0x02 0xAE 0x99 0xFE 0x30 0xBE 0xB9 0xF1 0x85 0x30 0x9E 0x84 0x48 0x98 0x17 0xF2 0xAA 0x7

我对Java卡编程相当陌生。我在基础知识方面遇到了一些问题

我创建了以下脚本:

echo "Key APDU";
send 0x84 0x20 0x00 0x00 0x40 0x2B 0x57 0xC0 0x2F 0x3C 0x25 0x36 0x61 0xF7 0x85 0x57 0x55 0x4B 0xAA 0x86 0x02 0xAE 0x99 0xFE 0x30 0xBE 0xB9 0xF1 0x85 0x30 0x9E 0x84 0x48 0x98 0x17 0xF2 0xAA 0x7E 0xE3 0x43 0xE2 0x7F 0xD7 0x69 0x73 0x7D 0xCA 0xAD 0xAB 0x58 0x60 0x35 0xEE 0x6D 0xD5 0x3D 0x45 0x0E 0x00 0xCC 0x37 0x6A 0xE8 0xEC 0xF1 0x6C 0x8E 0x34 0x3F;

echo "Data APDU";
send 0x84 0x22 0x00 0x00 0x80 0x20 0x48 0xDE 0xD2 0x6A 0xDC 0x34 0xE2 0xFB 0xA6 0xA5 0x8B 0x0E 0x84 0x65 0x5D 0x1A 0xC8 0x12 0x9C 0x27 0x55 0xE5 0xC2 0xF2 0xCA 0x34 0x14 0xEE 0x26 0x20 0x3D 0xA8 0x6C 0x7F 0xC3 0xAE 0xD2 0xD9 0x62 0xE6 0x2C 0xAF 0x0E 0xD3 0x29 0x62 0x9F 0x9F 0xCC 0x99 0x3E 0xAE 0x9D 0xE3 0x65 0xEC 0xE5 0x5C 0xFF 0x6E 0x47 0x3C 0xB7 0x0F 0xFB 0x6F 0x32 0xB5 0x87 0x52 0x45 0xD6 0xC9 0xDF 0x78 0x96 0xB4 0x15 0xAF 0xE1 0x50 0x04 0x07 0xB0 0xB2 0xF4 0x02 0x93 0x72 0xE0 0x13 0x4F 0x09 0x73 0xC1 0x86 0x03 0x64 0xBD 0xF0 0x83 0xE8 0x19 0xFF 0x7F 0x4F 0x96 0x4C 0xFC 0xEA 0x54 0x28 0x86 0x3A 0xD2 0x82 0x70 0x67 0x8C 0x9D 0x85 0xDC 0xAA 0xC3 0x13 0x5E 0xE9;

echo "Fin APDU";
send 0x84 0x24 0x00 0x00;
但是我得到了错误:(在第一次发送时)

我理解这意味着数据的长度不适合给定的数据长度(第5字节)。但是0x40(十六进制)是64(十进制),应该是正确的大小

我使用CommadAPDU类创建了所有命令。这表明尺寸应该是正确的

CommmandAPDU: 69 bytes, nc=64, ne=0
我创建了如下命令:

byte[] key = tester.getSessionKey();



CommandAPDU apduKey = new CommandAPDU(NEW_DATA_CLA, NEW_KEY_INS, 0x00, 
            0x00, key, 0, key.length);
    System.out.println("echo \"Key APDU\";\n" + "send " + bytesToHex(apduKey.getBytes()) + ";\n");
    System.out.println("\t\t" +apduKey);

    byte[] data = tester.encryptData("hallo Welt!");
    CommandAPDU apduData = new CommandAPDU(NEW_DATA_CLA, NEW_DATA_INS, 0x00, 0x00, data, 0 , data.length);
    System.out.println("echo \"Data APDU\";\n" + "send " + bytesToHex(apduData.getBytes()) + ";\n");

    CommandAPDU apduFin = new CommandAPDU(NEW_DATA_CLA, DATA_FIN_INS, 0x00, 0x00);
    System.out.println("echo \"Fin APDU\";\n" + "send " + bytesToHex(apduFin.getBytes()) + ";\n"); 

欢迎使用以下格式在NetBeans中提供java卡项目的任何帮助

//将APDU发送到这里 //0x80 0xCA 0x00 0x00Lc数据0x7F

0x00 0xA4 0x04 0x00 0X06 0X68 0XEA 0X30 0X8D 0X42 0XDF 0x7F;
这里7F是Le。请在命令中尝试Le字节。试着像

0x84 0x20 0x00 0x00 0x40 
0x2B 0x57 0xC0 0x2F 0x3C 0x25 0x36 0x61
0xF7 0x85 0x57 0x55 0x4B 0xAA 0x86 0x02
0xAE 0x99 0xFE 0x30 0xBE 0xB9 0xF1 0x85
0x30 0x9E 0x84 0x48 0x98 0x17 0xF2 0xAA
0x7E 0xE3 0x43 0xE2 0x7F 0xD7 0x69 0x73
0x7D 0xCA 0xAD 0xAB 0x58 0x60 0x35 0xEE
0x6D 0xD5 0x3D 0x45 0x0E 0x00 0xCC 0x37
0x6A 0xE8 0xEC 0xF1 0x6C 0x8E 0x34 0x3F
0x7F
将0x7F添加为Le字节。非上述格式的命令给出错误信息

Input data length != Lc around line x. hope this will remove the error

您在脚本或java代码中遇到问题了吗?在哪里运行脚本,使用哪个shell运行脚本?我使用的是Netbeans。这些命令在项目运行时执行的测试脚本中。将0x7F添加到末尾没有帮助。我与自己一起测试,并且当我不使用Le(字节0x00或0x7F)时,获取错误作为输入数据长度!=立法会四号线附近。
Input data length != Lc around line x. hope this will remove the error