
图1使用消息传递模型通讯
读卡器和卡之间的通信通常基于下面两种连接协议的一种,面向字节的T = 0,或者面向数据块的T = 1。还可能会用到被称为T = USB和T = RF的替换协议。JCRE APDU类向应用程序隐藏了一些协议细节,但不是全部,因为T = 0协议相当的复杂。
字串7
⒈APDU命令
一个APDU命令的结构由它的第一个字节的值控制,大部分情况下看上去如下所示:

图2、APDU命令
一个APDU命令有一个必须有的头和一个可选的体,包含:
· CLA(1字节):这个必要的字段识别指令的一个特定应用程序类。有效的CLA值在ISO 7816 - 4规范中定义:
表格1、ISO 7816 CLA值
| 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 | 保留给协议类型选择 |
字串9
· 理论上,你可以使用所有的CLA值0x80或者更高值来用于特定应用程序指令,但是在许多现在的Java Card实现中,只有黑体显示的是实际认可的。
· INS(1字节):这个必需的字段指明CLA字段中标示的指令类中的一个特定指令。ISO 7816 - 4标准指定用于访问卡上的数据的基本指令,当它根据在像标准中定义的卡上的文件系统那样结构化的时候。附加功能已经在这个标准中的其它地方说明,其中一些是安全功能。表2中是一个ISO 7816指令的列表。只有当使用一个相应的CLA字节值时,你才可以根据标准定义你自己的特定应用程序的INS值,。 字串4
表格2、当 CLA = 0x时的ISO 7816 - 4 INS值
| 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 |
字串3
· P1(1字节):这个必需的字段定义指令参数1。你可以使用这个字段来检验INS字段,或者用于输入数据。
· P2(1字节):这个必需的字段定义指令参数⒉你可以使用这个字段来检验INS字段,或者用于输入数据。
· Lc(1字节):这个可选的字段是命令的数据字段的字节数。
· 数据字段(可变的,字节Lc数):这个可选的字段保存命令数据。
· Le(1字节):这个可选的字段指定在期望响应的数据字段中的极限字节数。
取决于命令数据的存在与否以及相应是否必须,命令APDU有四种变化。只有在你使用协议T = 0时,你才需要关心这些变化:
字串2

图3、APDU命令的四个可能的结构
一个典型的应用程序将以不同的结构方式使用不同的APDU命令。
2、响应APDU
响应APDU的格式很简单的:

图4、响应APDU
和一个APDU命令相似,响应APDU有可选择的和必要的字段:
字串3
· 数据字段(可变长度,由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。 字串4
RMI(JCRMI)通讯模型
第二种通信模型依靠J2SE RMI分布式对象模型的一个子集。
在RMI模型中,一个服务器应用程序创建并生成可访问的远程对象,并且一个客户应用程序获得到远程对象的远程引用,然后调用它们的远程方法。在JCRMI中,Java Card小应用程序是服务器,而主应用程序是客户端。
JCRMI由类RMIService提供到扩展程序包javacardx.rmi中。JCRMI消息被封装到传入RMIService方法的APDU对象中,换句话说,JCRMI提供了一个基于APDU消息传递模型的分布式对象模型机制,通过这个机制服务器和客户端通信,来回传送方法信息、参数和返回值。 字串6
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
