APDU ошибки Javacard, если размер буфера> 7 - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь установить буфер CommandAPDU с байтовым массивом. Однако, если длина> 7, выдается следующая ошибка:

Исключение в потоке "main" java.lang.IllegalArgumentException: Invalid APDU: длина = 8, b1 = 1 при javax.smartcardio.CommandAPDU.parse (CommandAPDU.java:318) в javax.smartcardio.CommandAPDU. (CommandAPDU.java:98) в terminal.Main.main (Main.java:78)

Мой код:

byte terminal = 0x00;
byte instruction = 0x01;
byte [] msg = {0x01,0x00,0x01,0x00};
byte [] fullmsg = new byte[msg.length + 4];
System.arraycopy(new byte []{terminal}, 0, fullmsg, 0, 1);
System.arraycopy(new byte [] {instruction}, 0, fullmsg, 1, 1);
System.arraycopy(new byte [] {0,0}, 0, fullmsg, 2, 2);
System.arraycopy(msg, 0, fullmsg, 4, msg.length);
CommandAPDU cmdapdu = new CommandAPDU(fullmsg);

Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 03 июля 2018

Рассмотрите возможность использования CommandAPDU (int cla, int ins, int p1, int p2, byte [] data) (если вы не ожидаете никаких данных, возвращаемых с карты - то есть команда ISO-7816 case 3) или CommandAPDU (int cla, int ins, int p1, int p2, byte [] data, int ne) (если вы ожидаете, что некоторые данные будут возвращены с карты, то есть команда будет ISO-7816 case 4) создать объект CommandAPDU.

См. ISO 7816-3, раздел 12.1 "Единицы данных протокола приложения" для получения дополнительной информации о форматах Command APDU (частично доступно здесь ).

например:.

CommandAPDU cmdapdu = new CommandAPDU(terminal, instruction, 0, 0, msg);

или (не стесняйтесь заменить 256 любой другой ожидаемой длиной данных ответа):

CommandAPDU cmdapdu = new CommandAPDU(terminal, instruction, 0, 0, msg, 256);

Удачи!

...