可以在Java Card Applet中执行APDU命令吗?

时间:2018-04-18 00:27:57

标签: smartcard javacard jcop

我们知道Applet.process()方法正在调用"之间的#34; APDU请求及其APDU响应,即它可以读取一些incomiung APDU并发送一些传出作为响应。

但是,Applet可以发送自己的APDU命令并获得响应吗?即:

public void process(APDU apdu)
{
...
APDU resp = SomeAPI.someMethod("00A40101FF...");
...
}

3 个答案:

答案 0 :(得分:2)

  

但是,Applet可以发送自己的APDU命令并获得响应吗?

简单的答案是 NO ,因为您无法访问命令调度程序,所以无法为另一个小程序发送APDU。但有一种方法可以做到,请阅读下文。

public void process(APDU apdu)
{
...
APDU resp = SomeAPI.someMethod("00A40101FF...");
...
}

这样的任何东西都不可能在java卡小程序中(直到最新版本3.0.5u),因为这里存储了APDU对象的引用,其中临时JCRE入口点对象及其引用不能存储。

现在,要实现您想要的功能。使用可共享的界面对象。显然,您需要在此处修改目标小程序(您要调用它)。通过可共享对象调用applet将为您执行上下文切换,然后您可以在它之后返回到applet。

参考http://www.oracle.com/technetwork/java/javacard/specs-jsp-136430.html

答案 1 :(得分:2)

不,它不能。

您无权访问命令调度程序。

答案 2 :(得分:1)

我假设您不打算通过串行接口与目标Applet进行通信,但寻找“执行与接收此APDU时相同的功能”。

我有一些疑问,这个界面是否存在,并且由于以下原因没有看到用例:

  • 在javacard环境中,applet是自治构建块。
  • 如果您打算在同一个Applet中调用,那么应该有更方便的可能性。
  • 如果针对不同的小程序:隐含的向前和向后切换不符合当前所选小程序的APDU概念。