簡體   English   中英

Java智能卡發送命令

[英]Java smart card send command

我是Java Card編程的新手。 我在基本方面遇到了麻煩。

我創建了以下腳本:

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;

但是我得到了錯誤:(在第一次發送時)

Input data length != Lc around line 7.

我知道這意味着數據長度不適合給定的數據長度(第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"); 

任何幫助都適用

使用以下格式的Net Bean中的Java卡項目,

//在此處發送APDU // 0x80 0xCA 0x00 0x00 Lc Data 0x7F;

0x00 0xA4 0x04 0x00 0X06 0X68 0XEA 0X30 0X8D 0X42 0XDF 0x7F;

這里7樓是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM