gpt4 book ai didi

smartcard - 关于Javacards中SELECT APDU命令的一些问题

转载 作者:行者123 更新时间:2023-12-02 22:33:19 25 4
gpt4 key购买 nike

下面引用的段落是陈志群撰写的如何编写 Java Card applet:开发人员指南文章的一部分。

我看到了here

Once an applet is selected, the JCRE forwards all subsequent APDU commands (including the SELECT command) to the applet's process() method. In the process() method, the applet interprets each APDU command and performs the task specified by the command. For each command APDU, the applet responds to the CAD by sending back a response APDU, which informs the CAD of the result of processing the command APDU. The process() method in class javacard.framework.Applet is an abstract method: a subclass of the Applet class must override this method to implement an applet's functions."

<小时/>

更新:

下面的段落是 Oracle 文章的一部分,该文章名为编写 JavaCard Applet ( Here ):

Examines the Header

The process method examines the first two bytes of the APDU header, the CLA byte and INS byte. If the value of the CLA byte is 0 and the value of the INS byte is 0xA4, it indicates that this is the header of a SELECT APDU command. In this case, the process method returns control to the JCRE:

// check SELECT APDU command 
if ((buffer[ISO7816.OFFSET_CLA] == 0) &&
(buffer[ISO7816.OFFSET_INS] == (byte) (0xA4)) )
return;

enter image description hereQ0:在上面的Image App1中已经选择了。当JCRE接收到新的SELECT APP2命令时,它会做什么?它引用了 App1process() 方法并从中接收返回值?或者调用App1deselect()方法,然后调用App2select()方法?

如果 JCRE 将 SELECT App2 APDU 命令发送到 App1process() 方法,收到 Return 后会发生什么 来自它?!

如果JCRE在收到SELECT App2 APDU命令后立即调用app1的deselect(),然后调用app2的select(),那么在从app2的select()方法接收到true后它会做什么?它等待下一个命令吗?

<小时/>

Q1:根据上面的段落(特别是粗体部分),我得出的结论是,我可以编写一个小程序,当它选择时,不可能选择另一个小程序(直到卡删除)为此,我们只需在其 process() 方法中编写一段代码,以便在收到 SELECT APDU 命令时选择自身。这是正确的吗?

问题2:有没有办法取消选择小程序,而不发送另一个选择命令或从 CAD 中删除卡?

Q3:是否可以编写一个小程序,使其在另一个事件小程序的后台保持事件状态? (类似于计算机中的键盘记录器)我自己认为这是不可能的,因为java卡与多线程不兼容。是这样吗?

感谢任何帮助。

最佳答案

Q0(更新):如果收到未选择当前小程序的按名称选择,则:

  • 如果选择了另一个 Applet,则仅调用 deselect 方法
  • 如果没有选择其他 Applet,则仅调用 process 方法

Q1:不会。系统在将所有 SELECT by NAME APDU 转发到 Applet process 方法之前仍会处理它。因此,在将 SELECT 发送到当前选定的 Applet 之前,可以选择另一个 Applet,并且新选择的 Applet 将接收 APDU。

请注意,如果使用当前 Applet 的 AID 接收到按名称选择,系统甚至会重新选择当前 Applet(因此取消选择时清除的所有内存和对象都将被清除,并且选择deselect 方法将被调用)。

请注意,后来的 API(Chen 的书仍然适用,但有点老化)添加了一个方法来检查 APDU 是否用于选择当前的 Applet。这对于检查如何选择它也很有用,如果Applet也默认选择,即在收到任何APDU之前,这主要是有用的。

第二季度:不,目前还没有。这是一个棘手的功能,会对防火墙和安全产生影响。因此,这并不是对 Java Card 标准的一次小更新。不过,它在论坛上出现了很多。当然,您可以通过防火墙访问其他小程序。

Q3:确实没有后台任务。添加多线程会完全破坏Java Card Classic Edition的API,所以永远不会添加。要共享信息,两个小程序必须明确设计为这样做,并且防火墙规则将生效。

关于smartcard - 关于Javacards中SELECT APDU命令的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25958082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com