защищенный канал ввода / вывода смарт-карты java

#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 Либрайри, похоже, делает то, что я хочу