有人可以告诉我如何使用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];
}
}
答案 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规范的关系。