#java #smartcard
#java #смарт-карта
Вопрос:
В настоящее время я пытаюсь написать тест для апплета JavaCard. Я использую JUnit и javax.smartcardio для отправки всех моих команд на смарт-карту. Но мне нужно открыть защищенный канал, чтобы один из моих тестов работал правильно. После двухдневного тщательного поиска документации и экспериментов я не могу найти способ открыть этот защищенный канал. кто-нибудь имеет представление об API smartcardio? или другой API, готовый это сделать?
//TODO: need secure channel
byte[] header = {(byte)0x02, (byte)0x01, (byte)0x01}; //tag length
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
outputStream.write(header);
outputStream.write(Value.SN.getBytes());
byte[] excpectedRes = outputStream.toByteArray();
// not a secure channel at all
ResponseAPDU answer = channel.transmit(new CommandAPDU(0x84, 0xCA, 0x02, 0x01, Value.Emptydata));
nameTest = "Test Select Serial number " answer.toString();
CheckSW(0x90, 00, answer);
CheckResult(excpectedRes, result);
Это мой код, и я всегда получаю ответ 0x69 0x82 (статус безопасности не удовлетворен)
Спасибо
Комментарии:
1. Пожалуйста, уточните свой вопрос или опубликуйте свой нерабочий код … объясните, в чем проблема
2. Пример кода @AnuragSharma выполнен. проблема «мой канал» — это простой javax.smartcardio.CardChannel
Ответ №1:
Проблема здесь в том, что вы пытаетесь отправить Get Data
команду, которая требует аутентификации, что означает, что вы должны запустить initialize update
и external authenticate
перед использованием команды Get data.
Если вы просто хотите проверить, работает ваш код или нет, вы можете протестировать, выбрав MF, а APDU
A0 A4 00 00 02 3F00
который вернется 9F XX
.
Комментарии:
1. @user2194553 вы это проверили?
2. Да, но это отправит мне обратно 6A 86, теперь я отправляю свои исследования по этому вопросу secinfo.msi.unilim.fr/opal Либрайри, похоже, делает то, что я хочу