Nano Hash - криптовалюты, майнинг, программирование

Скрипт персонализации java-карты с использованием smartcardio API

Привет, я пишу скрипт для персонализации java-карты с использованием API smartcardio.

Ниже приведен код Java

    TerminalFactory tf = TerminalFactory.getDefault();
    List<CardTerminal> terminals = tf.terminals().list();

    CardTerminal cardTerminal1 = (CardTerminal) terminals.get(0);
    Card connection1 = cardTerminal1.connect("T=0");
    CardChannel channel = connection1.getBasicChannel();

    byte[] apdu = new byte[] { (byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00, (byte) 0x07, (byte) 0xA0,(byte) 0x00, (byte) 0x00, (byte) 0x01,(byte) 0x51,(byte) 0x00,(byte) 0x00};
    String hex1 = DatatypeConverter.printHexBinary(apdu);
    System.out.println("Select Request : " + hex1 + "\n");

    ResponseAPDU respApdu = channel.transmit(new CommandAPDU(apdu));
    byte[] resp1 = respApdu.getBytes();
    hex1 = DatatypeConverter.printHexBinary(resp1);
    System.out.println("Select Response : " + hex1 + "\n");


     apdu = new byte[] { (byte) 0x80, (byte) 0xCA, (byte) 0x9F, (byte) 0x7F, (byte) 0x2A};
     hex1 = DatatypeConverter.printHexBinary(apdu);
     System.out.println("Get Request with CLA 80 : " + hex1 + "\n");


     respApdu = channel.transmit(new CommandAPDU(apdu));
     resp1 = respApdu.getBytes();
     hex1 = DatatypeConverter.printHexBinary(resp1);
     System.out.println("Get Response with CLA: " + hex1 + "\n");



    apdu = new byte[] { (byte) 0x00, (byte) 0xCA, (byte) 0x9F, (byte) 0x7F, (byte) 0x2A};
    hex1 = DatatypeConverter.printHexBinary(apdu);
    System.out.println("Get Request with CLA 00 : " + hex1 + "\n");


    respApdu = channel.transmit(new CommandAPDU(apdu));
    resp1 = respApdu.getBytes();
    hex1 = DatatypeConverter.printHexBinary(resp1);
    System.out.println("Get Response with CLA 00: " + hex1 + "\n");


     apdu = new byte[] { (byte) 0x80, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x08,(byte) 0xEC, (byte) 0xB9, (byte) 0x27, (byte) 0x11, (byte) 0xDF, (byte) 0x0F, (byte) 0x61, (byte) 0x79};

    hex1 = DatatypeConverter.printHexBinary(apdu);
    System.out.println("Initialize Request Command : " + hex1 + "\n");


    respApdu = channel.transmit(new CommandAPDU(apdu));
    resp1 = respApdu.getBytes();
    hex1 = DatatypeConverter.printHexBinary(resp1);
    System.out.println("Initialize Response : " + hex1 + "\n");

Выводится следующее

Выберите запрос: 00A4040007A0000001510000

Select Response : 6F5B8407A0000001510000A550734A06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B040215650B06092B8510864864020103660C060A2B060104012A026E01029F6501FF9000

Получить запрос с CLA 80: 80CA9F7F2A

Получите ответ с CLA: 9F7F2A53430019492170676001E7702B05718231581144729111447291114472912A0D0000000000000006D00

Получить запрос с CLA 00: 00CA9F7F2A

Получите ответ с CLA 00: 53430019492170676001E7702B05718231581144729111447291114472912A0D00000000000000000000009000

Команда запроса инициализации: 8050000008ECB92711DF0F6179

Ответ инициализации: 6D00

Если я отправляю команду с CLA 00, я получаю правильный ответ 90 00, иначе карта возвращает 6D 00.

Если у кого-то есть идея, просто дайте мне знать, как я могу решить эту проблему с помощью API smartcardio?

25.01.2018

Ответы:


1

К смарткардио это не имеет никакого отношения, 6D00 означает, что команда, которую вы отправляете, не распознается картой. Проверьте руководство вашей карты/апплета на правильность кодирования командного APDU.

25.01.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..