如何通过 apdu 命令来命令 apdu 功能

how to pass apdu command to command apdu function

大家好,我是 java 卡的新手,我有以下数据

CLA '00'
INS 'A2' nb not real value
P1  '00'
P2  '00'
LC  '08'
Data In 'EF08'
Le   '0D'

如何将上述指令写入字节并发送给这个函数?我需要获得 9000 作为成功响应和数据输出。

 ResponseAPDU respApdu = channel.transmit(
                                 new CommandAPDU(cmd));

有多种方法可以做到这一点:

案例 1:(不鼓励)

int cla = 0x00;
int ins = 0xA2;
int p1  = 0x00;
int p2  = 0x00;
//int LC  = 0x08;'
byte[] data = new byte[] {(byte) 0xEF, (byte) 0x08};
int le  = 0x0D;

ResponseAPDU respApdu = channel.transmit(
                             new CommandAPDU(cla, ins, p1, p2, data, le));

案例二:(鼓励)

byte[] apdu = new byte[] {(byte) 0x00, (byte) 0xA2, (byte) 0x00, (byte)
              0x00, (byte) 0x02, (byte) 0xEF, (byte) 0x08, (byte) 0x0D};

ResponseAPDU respApdu = channel.transmit(
                             new CommandAPDU(apdu));

阅读更多关于 CommandAPDU and CardChannel 的信息。

案例三:(最常用的方式)

String apdu = "00A2000002EF080D"; //also u can append strings into apdu
ResponseAPDU respApdu = channel.transmit(
                             new CommandAPDU(toByteArray(apdu)));

您需要一个 Helper 函数:

import javax.xml.bind.DatatypeConverter;
public static byte[] toByteArray(String s) {
    return DatatypeConverter.parseHexBinary(s);
}

注意:您显示的示例 APDU 值,LC '08' 表示数据将有 8 个字节长,但您的数据字段只有 2 个字节长。所以再次检查 LC