CommandAPDU commandAPDU = new CommandAPDU(0x00, 0xA4, 0x00, 0x0C, new byte[]{0002},0,0x01);
不会做你期望它做的事情。
new byte[]{0002}
将为您提供一个字节数组,其中一个字节的值为 2。此外,,0,0x01);
(最后两个参数)将使构造函数仅从 DATA 数组中选取一个字节。所以你的 APDU 将如下所示:
+------+------+------+------+------+------+------+
| CLA | INS | P1 | P2 | Lc | DATA | Le |
| 0x00 | 0xA4 | 0x00 | 0x0C | 0x01 | 0x02 | --- |
+------+------+------+------+------+------+------+
这可能不是您所期望的。你想要吗new byte[]{0, 2}
反而?使用
CommandAPDU commandAPDU = new CommandAPDU(0x00, 0xA4, 0x00, 0x0C, new byte[]{0, 2}, 256)
将产生以下 APDU(请注意,Le 存在并设置为 0 (Ne = 256);Lc 是根据 DATA 数组的大小自动推断出来的):
+------+------+------+------+------+-----------+------+
| CLA | INS | P1 | P2 | Lc | DATA | Le |
| 0x00 | 0xA4 | 0x00 | 0x0C | 0x02 | 0x00 0x02 | 0x00 |
+------+------+------+------+------+-----------+------+
Or using
CommandAPDU commandAPDU = new CommandAPDU(0x00, 0xA4, 0x00, 0x0C, new byte[]{0, 2})
将产生以下 APDU(请注意,Le 不存在 (Ne = 0);Lc 是根据 DATA 数组的大小自动推断出来的):
+------+------+------+------+------+-----------+------+
| CLA | INS | P1 | P2 | Lc | DATA | Le |
| 0x00 | 0xA4 | 0x00 | 0x0C | 0x02 | 0x00 0x02 | --- |
+------+------+------+------+------+-----------+------+