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 |
+------+------+------+------+------+-----------+------+
Или использование
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 | --- |
+------+------+------+------+------+-----------+------+