有人可以告诉我如何使用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];
}
}
最佳答案
如果您使用 JCOP 插件来开发 Applet,您可以在 bin/目录中看到每个包的 .CAP 文件。现在您需要按照依赖关系的顺序安装每个包。假设您的应用程序由包 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 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
现在可以选择所有处于 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
现在,您可以使用发送命令向上述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 运行时环境和 JC VM 的工作原理以及它与 API 和一些 GP 规范的关系。
关于java - 如何使用java卡向智能卡写入数据?举例说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283869/