


| CLA 值 | 指令类 |
| 0x0n, 0x1n | ISO 7816 - 4卡指令,比如文件存取和安全操作 |
| 20 to 0x7F | 保留 |
| 0x8n or 0x9n | 你可以用作你的特定的应用程序指令的ISO/IEC 7816 - 4格式,根据标准解释' X ' |
| 0xAn | 特定的应用程序或者供应商的指令 |
| B0 to CF | 你可以用作特定应用程序的ISO/IEC 7816 - 4格式 |
| D0 to FE | 特定的应用程序或者供应商的指令 |
| FF | 保留给协议类型选择 |
| INS 值 | 命令描述 |
| 0E | Erase Binary |
| 20 | Verify |
| 70 | Manage Channel |
| 82 | External Authenticate |
| 84 | Get Challenge |
| 88 | Internal Authenticate |
| A4 | Select File |
| B0 | Read Binary |
| B2 | Read Record(s) |
| C0 | Get Response |
| C2 | Envelope |
| CA | Get Data |
| D0 | Write Binary |
| D2 | Write Record |
| D6 | Update Binary |
| DA | Put Data |
| DC | Update Record |
| E2 | Append Record |
· P1(1字节):这个必需的字段定义指令参数1。你可以使用这个字段来检验INS字段,或者用于输入数据。
· P2(1字节):这个必需的字段定义指令参数⒉你可以使用这个字段来检验INS字段,或者用于输入数据。
· Lc(1字节):这个可选的字段是命令的数据字段的字节数。
· 数据字段(可变的,字节Lc数):这个可选的字段保存命令数据。
· Le(1字节):这个可选的字段指定在期望响应的数据字段中的极限字节数。
取决于命令数据的存在与否以及相应是否必须,命令APDU有四种变化。只有在你使用协议T = 0时,你才需要关心这些变化:
图3、APDU命令的四个可能的结构
一个典型的应用程序将以不同的结构方式使用不同的APDU命令。
2、响应APDU
响应APDU的格式很简单的:
图4、响应APDU
和一个APDU命令相似,响应APDU有可选择的和必要的字段:
· 数据字段(可变长度,由APDU命令中的Le确定):这个可选择的字段包含小应用程序返回的数据。
· SW1(1字节):这个必要的字段是状态字1。
· SW2(1字节):这个必要的字段是状态字2。
这些状态字的值在ISO 7816 - 4规范中定义:
图5、响应状态码
Java Card框架应用编程接口中的ISO7816 Java接口定义了许多常数来帮助规范返回错误代码。
3、过程APDU
每当有一个进入的APDU用于所选择的小应用程序,JCRE就调用小应用程序的process ()方法,把进入的APDU作为一个参数传送。这个小应用程序必须解析APDU命令,处理数据、生成一个响应APDU,然后把控制权返回给JCRE。
RMI(JCRMI)通讯模型
第二种通信模型依靠J2SE RMI分布式对象模型的一个子集。
在RMI模型中,一个服务器应用程序创建并生成可访问的远程对象,并且一个客户应用程序获得到远程对象的远程引用,然后调用它们的远程方法。在JCRMI中,Java Card小应用程序是服务器,而主应用程序是客户端。
JCRMI由类RMIService提供到扩展程序包javacardx.rmi中。JCRMI消息被封装到传入RMIService方法的APDU对象中,换句话说,JCRMI提供了一个基于APDU消息传递模型的分布式对象模型机制,通过这个机制服务器和客户端通信,来回传送方法信息、参数和返回值。