您实际使用的命令不是您期望的。
使用此阅读器获取UID /序列号/枚举标识符的正确命令APDU为:
+------+------+------+------+------+| CLA | INS | P1 | P2 | Le |+------+------+------+------+------+| 0xFF | 0xCA | 0x00 | 0x00 | 0x00 |+------+------+------+------+------+
但是,您使用的构造函数定义为:
public CommandAPDU(int cla, int ins, int p1, int p2, int ne);
所以用
new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 0x00)
要创建一个C-APDU以下参数
CLA = 0xFF,
INS = 0xCA,
P1 = 0x00,
P2 =0x00。到目前为止,这与上述APDU相同。但是最后一个参数是
Ne = 0x00。
Ne = 0表示预期响应字节数为零(而Le =
0表示预期响应字节数为(最大)256)。
这样可以有效地创建以下Case-1 APDU:
+------+------+------+------+| CLA | INS | P1 | P2 |+------+------+------+------+| 0xFF | 0xCA | 0x00 | 0x00 |+------+------+------+------+
因此,至多您将获得2字节状态字作为响应(
0x90 0x00状态代码如表示成功或表示错误
0x6X 0xXX)。
因此,您可以使用字节数组来形成APDU:
new CommandAPDU(new byte[] { (byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x00 } )或者,您可以为设置一个适当的值
Ne:
new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 256)



