如何使用java卡将数据写入智能卡?用例子

时间:2011-11-27 05:36:34

标签: java byte smartcard javacard apdu

有人可以告诉我如何使用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];
    }
}

1 个答案:

答案 0 :(得分:1)

如果您使用JCOP插件开发Applet,您可以在每个包的bin /目录中看到.CAP文件。现在,您需要按依赖顺序安装每个包。假设您的应用程序包含A,B和C包以及您的Clet包中的applet。而B进口A和C进口B.

您需要安装软件包的顺序是A,B,C。使用JCOP,可以通过以下方式实现:

cm> install <pkgAID> package.cap

对三个软件包完成此操作后,您将需要安装该小程序。这可以通过以下方式实现:

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

执行此操作后,您将看到applet处于SELECTABLE状态。您的JCOP shell控制台如下所示:

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

现在可以选择并与之交互的所有这些applet ini SELECTABLE状态。如果要使用A00000008710015553将数据发送到Applet,则需要先选择它。互动如下所示:

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

现在,您可以使用send命令将数据发送到上述Applet:

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规范的关系。