![]() |
Модераторы: AntonSaburov |
![]() ![]() ![]() |
|
firstone |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Это черновик!
Приветствую! Думаю начинать нужно с простого, а посему разберем простой пример: карта передаст сообщение "Hello Java Card world!". По скольку как ни смотри мы программируем внешнее устройство, то нам придется перевести строку в ее байтовый вид (здесь я использовал ASCII-кодировку): 48 65 6C 6C 6F 20 4A 61 76 61 20 43 61 72 64 20 77 6F 72 6C 64 21. Ну что, приступим? Сперва необходимо сказать пару слов oб организации информации на карте. Все приложения на карте делятся на два вида: security domains & applications. Security domain - это представитель определенной организации, которой принадлежит security domain. Для того, чтобы установить приложение в security domain организации, необходимо получить ее разрешение в виде ключей для аутентификации security domain, а в некоторых случаях и специальную печать (строго говоря криптографическим языком - подпись), уникальную для каждого приложения (апплета). Уровень безопасности определяет организация. Security domain-ов может быть несколько, причем они могут быть пострены в иерархию (подробнее смотрите статью: "Организация информации на карте"). Программные модули на карте имеют следующую структуру: каждое приложение может содержать несколько апплетов. Говоря языком Java приложение - это package, а апплеты отдельные классы в этом package-е, причем и у package и у классов есть уникальные AID (Application ID) - байтовые строки (другими словами - имена). AID задаются разработчиком и содержатся в скомпилированном коде. При загрузке апплетов на карту, AID всех апплетов + AID самого package регистрируются в реестре карты. Кроме самих AID в реестр записываются также привелегии (такие как, например может ли апплет удалять апплеты в другом security domain-е, блокировать карту и пр.) Для того, чтобы лучше понять следующее Вам желательно ознакомиться со статьей "Смарт карты. Общие сведения". Модуль приложения для Java Card представляет собой класс наследуемый от абстрактного класса javacard.framework.Applet (в большинстве случаев приложения содержат один апплет). Есть минимальный набор методов, которые должны быть реализованы для того, чтобы обеспечить загрузку апплета в память карты и его функционирование, а именно:
Метод install
Контрольные данные: это в принципе привилегии (privileges) для апплета (т.е. перечень специальных действий которые ему разрешается выполнять). 1-3 байта Данные апплета: параметры для апплета (определяются разработчиком) Как было сказано выше метод install создает объект класса апплета и регистрирует его в реестре карты. Этот метод обязан выполнить эти два действия для успешной установки апплета. Первое, что выполняется - это создание объекта апплета (вызов конструктора), здесь все определяет разработчик. Регистрация апплета выполняется путем вызова метода Applet.register(). У этого метода есть два перегрузчика:
Первый перегрузчик имеет следующие параметры: bArray - буфер содержащий AID только что созданного объекта апплета. bOffset - смещение в буфере указывающее на начало этого AID. bLength - длина AID. Именно указанный AID и будет зарегистрирован в реестре карты. Второй перегрузчик не имеет параметров, он использует AID класса апплета для регистрации в реестре. Метод process С методом process все немного сложнее, ведь он ответственнен за всю передачу/прием APDU-пакетов, в чем заключается вся функциональность апплета. Мы конечно же в нашем примере не будем останавливаться на всех тонкостях приема/передачи пакетов, лишь определим команды нашего апплета. Для начала определим CLA (class byte): 0x80. Инструкции выберем следующие: 0х01: Передать сообщение "Hello Java Card world!" 0x02: Ничего не делать (только для проверки) Все остальные значения INS будут выдавать ошибку 6D00 (т.е. INS value not supported). Еще один момент заслуживает внимания. Как было сказано выше на карте могут быть установлены несколько апплетов. Значит должен быть какой-то механизм который бы позволил выбрать определенный апплет для работы. Такой механизм представлен командой SELECT (определена в ISO/IEC 7816-4). В поле Data этой команды записывается AID объекта апплета созданного на карте, который необходимо выбрать (эта команда имеет также некоторые параметры, но мы на них останавливаться не будем). В классе Applet есть специальный метод, позволяющий отличить команду выбора этого апплета от всех других команд:
Этот метод может вызываться только из метода process. Обычно в случае выбора апплета возвращают код 9000, т.е. удачное выполнение команды. И так, давайте посмотрим на нашу программу:
Для того, чтобы скомпилировать и установить апплет, ознакомтесь со статьей: "Компиляция и установка приложений на Java Card" Давайте теперь запустим наше приложение на карте. Это сообщение отредактировал(а) firstone - 17.4.2008, 12:09 --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
||||||
|
|||||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: нет Всего: 39 |
<здесь был тупой вопрос, возникший по невнимательности>
Это сообщение отредактировал(а) Alexandr87 - 30.4.2008, 08:01 |
|||
|
||||
jmdonetsk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 17.4.2011 Репутация: нет Всего: нет |
Подскажите почему Jcop tool не создает .сар файл, и в результате не может его загрузить на карту...
С картами только начинаю разбираться, извините за примитивный вопрос Вопрос решился полным сносом eclipse и повторной установкой. Это сообщение отредактировал(а) jmdonetsk - 18.4.2011, 01:27 |
|||
|
||||
sknzv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 5.5.2011 Репутация: нет Всего: нет |
добрый вечер!! скачал и установил "java_card_kit-classic-3_0_2-rr-bin-do-b48-windows-11_dec_2009.jar"..пытался запустить апплет helloworld как описано в документации..при вводе команды "ant all" выводит сообщение "ant не является внутренней или внешней программой.."..что такое ant и как исправить ошибку?? спасибо!
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java Card | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |