Как записать данные на смарт-карту с помощью java-карты? с примером

Может ли кто-нибудь сказать мне, как записывать данные на смарт-карту с помощью java-карты? у меня есть этот код, я использую java-карту 2.2

private void writeName(APDU apdu) throws ISOException
{ 
    apdu.setIncomingAndReceive();
    byte[] apduBuffer = apdu.getBuffer();

    byte j = (byte)apduBuffer[4];

    userName = new byte[j];
    for (byte i=0; i<j; i++)
    {
        userName[(byte)i] = (byte)apduBuffer[5+i];
    }
}

person Sachin D    schedule 27.11.2011    source источник
comment
кард-ридер,смарт-карта,java-карта 2.2.2,редактор - eclipse   -  person Sachin D    schedule 27.11.2011
comment
возможный дубликат как писать и читать данные со смарт-карты с помощью java card apdu   -  person Abizern    schedule 27.11.2011


Ответы (1)


Если вы используете подключаемый модуль JCOP для разработки апплета, вы можете увидеть файлы .CAP в каталоге bin/ для каждого пакета. Теперь вам нужно будет установить каждый пакет в порядке зависимости. Предположим, ваше приложение состоит из пакетов A, B и C с вашим апплетом в пакете C. И B импортирует A, а C импортирует B.

Порядок, в котором вам нужно будет установить пакеты: A, B, C. Используя JCOP, это может быть достигнуто следующим образом:

cm> install <pkgAID> package.cap

После того, как вы сделали это для трех пакетов, вам нужно будет установить апплет. Это может быть достигнуто за счет:

cm> install -q <install params> <pkgAID> <AppletAID> packageC.cap

Как только вы это сделаете, вы увидите апплет в состоянии SELECTABLE. Ваша консоль оболочки JCOP будет выглядеть так:

Card Manager AID   :  A000000003000000
Card Manager state :  SECURED

    Application:  SELECTABLE (--------) A00000008710015553
    Application:  SELECTABLE (--------) "2PAY.SYS.DDF01"
    Application:  SELECTABLE (--------) A0004D6946617265
    Application:  SELECTABLE (--------) A0000000041010  

И все те пакеты, которые являются «модулями» (библиотеками), показаны так:

    Load File  :      LOADED (--------) A0000002994E6F53
     Module    :                        A0000002994E6F53656C656374
    Load File  :      LOADED (--------) A0000002990410  
     Module    :                        A00000029904101045

Все эти апплеты в состоянии SELECTABLE теперь можно выбирать и взаимодействовать с ними. Если вы хотите отправить данные в апплет с A00000008710015553, вам нужно будет сначала выбрать его. Взаимодействие будет таким, как показано ниже:

cm>  /select A00000008710015553
 => 00 A4 04 00 09 A0 00 00 00 87 10 01 55 53 00       ............US.
 (5273 usec)
 <= 90 00                                              ..
Status: No Error

Теперь вы можете отправить данные в указанный выше апплет с помощью команды отправки:

cm>  /send 00200000043131313100
 => 00 20 00 00 04 31 31 31 31 00                      . ...1111.
 (34423 usec)
 <= 90 00                                              ..
Status: No Error

Это все стандартные команды GP. Я предположил, что вы используете карту, совместимую с GP; хотя вы ничего об этом не упомянули.

Я лично считаю, что вам нужно немного прочитать о том, как работает JC Runtime Environment и JC VM, а также о том, как они связаны с API, и немного о спецификации GP, прежде чем углубляться дальше.

person Kiran Kuppa    schedule 27.11.2011
comment
Я использую редактор eclipse с установленными в нем пакетами java-карт, и еще одна вещь, которую я использую JCOP SHELL для запуска программы. Когда я запускаю программу, она выполняет все вышеперечисленные шаги. только мы должны выбрать апплет и отправить команды читать и писать. Спасибо за всю поддержку. - person Sachin D; 14.12.2011