смарт-карты eVRC - PullRequest
       14

смарт-карты eVRC

2 голосов
/ 01 марта 2012

Есть ли у кого-нибудь опыт чтения eVRC (электронных карт регистрации автомобилей) и команд APD U в JAVA?

Любой пример будет полезен.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Я настоятельно рекомендую вам воспользоваться библиотеками javax.smartcardio. Обратите внимание, что существуют некоторые проблемы с доступностью, такие как для 64-битных и условия доступа для 32-битных в более поздних средах выполнения Java. Тем не менее, интерфейс APDU и CardTerminal довольно аккуратен по сравнению со многими другими API, работающими с APDU.

[ОБНОВЛЕНИЕ] о командах, похоже, это простая файловая карта , которая не выполняет шифрование и использует собственную файловую структуру в указанном DF. Итак, основная операция: извлечь ATR, SELECT по AID, теперь вы находитесь в DF (корень приложения). Затем выберите каждый файл, используя SELECT по идентификатору файла, а затем число X команд READ BINARY.

1007 * Е.Г. *

send "00A4040C 0X <AID>" // SELECT DF aid was not given in document, so find this out, probably JRC
send "00A40200 02 D001 00" // SELECT EF.Registration_A (and hopefully parse the response to get the file length)

send "00B00000 00" // READ BINARY return up to 256 bytes or
send "00B00005 XX" // READ BINARY return xx bytes, the number of bytes left, from offset 05

Это было бы на Яве (из головы):

CommandAPDU command = new CommandAPDU(0x00, 0xA4, 0x02, 0x00, new byte[] { (byte) 0xD0, (byte) 0x01 }, 256);
ResponseAPDU response = channel.send(command);

Обратите внимание, что вам может понадобиться проанализировать первые несколько байтов READ BINARY, чтобы определить длину файла совместимым способом. Убедитесь, что вы не читаете фактическое количество оставшихся байтов, так как в принципе вы можете получить любую ошибку. При зацикливании учитывается только количество фактически возвращенных байтов, а не запрошенное (максимальное) число.

Если вы используете библиотеки IO смарт-карт, вам нужно только указать первые 4 байта в качестве заголовка, затем данные (для вас будет рассчитана длина данных команды), а затем Ne, максимальное количество байтов Вы хотите вернуть (если применимо).

Основная проблема заключается в анализе основной структуры BER и проверке подписи, конечно, но я считаю, что это выходит за рамки.

0 голосов
/ 13 ноября 2013

Вам может понравиться https://github.com/grakic/jevrc

JEvrc - это многократно используемая библиотека Java с открытым исходным кодом для чтения открытых данных с карты eVRC Сербии / ЕС.Он включает в себя упрощенный анализатор TLV для анализа данных карты.Он поддерживает профиль сербской карты eVRC, но его можно обобщить с помощью одного или двух патчей.

...