




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、利用 Java 语言开发智能卡应用程序内容提要:本文介绍了智能卡的分类、文件系统、接口协议和 Java 卡的知识及其开发流程,介绍了 JCDK 环境的下载、安装和 8 个基本命令的使用。本文通过银行卡的应用实例,指导读者编写智能卡 Applet,将 CAP 文件下载到智能卡上和使用 apdu 文件访问智能卡的程序。通过本文的学习,应该掌握智能卡的实现技术,可以熟练使用 JBuilde 编写智能卡程序。关键字:分类、文件系统、接口协议、Java 卡引言:对于 IC(Intelligent Card)卡,相信大家都很熟悉,如经常使用的银行卡、电话卡、地铁卡,这些都是 IC 卡的种类。每个 IC 卡
2、都有专门的代码控制它们的实现功能,如某人利用地铁 IC 卡从一个检测门进入,然后在目的地的检测门出去,IC 卡便会将相关的信息传送给服务器,使服务器可以进行一系列的数据处理。正文:1 智能卡1.1智能卡的分类智能卡按嵌入的芯片种类分,可以分为以下两类。1. 接触式卡这种卡需要使用读卡器的装置进行信息的读写操作。这种卡的表面上嵌着小的金属片,当把卡插入读卡器时,该小金属片就会同一个电子接头接触,通过这个电子接头对芯片读写数据。接触式卡主要分为以下两类卡。1)存储卡存储卡不包含复杂的处理器,它不能动态的管理文件,与读卡器的通信是同步通信。IC 电话卡就是存储卡。2)微处理器卡微处理器卡是本文所要讨
3、论的卡片,它与存储卡的的区别是:具有动态处理数据的功能。微处理器卡的系统结构有微处理器(CPU)和 EEPROM(E2PROM),如 SIM 卡(手机卡),银行卡等都是微处理器卡。接触卡和读卡器如图 1 所示。图 12. 非接触式卡非接触式智能卡看上去和普通的塑料信用卡相似,在卡体中内嵌了天线和微电子芯片,当把它放近读卡器的天线时,它们之间就可以完成一次信息交换。这使其不用与感应器接触,便可交换信息,并且处理时间极短。如地铁卡、高速公路收费卡便是非接触卡。注意:智能卡遵循 ISO7816 标准。ISO7816 标准规定了卡用塑料的物理特性,包括温差范围、弹性、电子触点的位置以及内置微芯片和进行
4、信息交换的方式等。11.2智能卡的文件系统智能卡的文件系统和 DOS 的树形文件系统相似。智能卡的文件分为:DF(Dedicated File)和EF(Elementary File)。DF 包含控制信息,可以成为 EF 或 DF 的父文件,与 DOS 中的目录文件相同;EF 是数据单位的集合,不能成为任何文件的父文件,与 DOS 中的 TXT 文件相同。智能卡文件系统必须有根文件(ROOT),是 DF 文件,也可以称为 MF(Master File 主文件)。每个文件都有一个文件的 ID(两个字节),如 ROOT 的 ID 一般为“3F00”。如果要对文件进行读写操作,就必须先用“selec
5、t”命令来选择该文件的 ID。如有兴趣希望进一步了解智能卡的文件结构,请参阅 ISO7816 标准,查看地址是 http:/www.iso.ch/iso/en /ISOOnline.frontpage,在主页面的搜索框内填入“7816”关键字查找相关的文档,网址 上也有该文件,目录是 35ThemesJBuilderC32。1.3智能卡的接口协议智能卡是通过它的 8 个触点(该 8 个触点由 ISO7816 标准规定,如表 1 所示)与读卡器进行通信的。表 18 个触点的定义触点定义触点定义C1Vcc = 5V(供电电压)C5Gnd(接地)C2Rese
6、t(重置信号)C6Vpp(编程电压)C3Clock(时钟信号)C7I/O(数据输入/ 输出)C4RFU(保留)C8RFU(保留)根据 ISO7816.4 规定,智能卡与外界的通信数据接口是 APDU(Application Protocol Data Units,应用协议数据单元)。APDU 制定了命令格式和响应格式,在数据交流中,卡只能接受信息,等待读卡器或终端向它发送 APDU,收到 APDU 后,执行 APDU 中的命令,返回 APDU 响应。如图 2 所示。返回apdu命令的响应发送apdu命令发送读卡器智能卡图 2通过 APDU 命令和返回响应,便完成卡与读卡器或终端的通信。APDU
7、 的命令格式如表 2 所示。表 2 APDU 的命令格式必须部分(Mandatory Header)可选择部分(Conditional Body)CLAINSP1P2LcData fieldLe上述符号表示的意思如下:( 1)CLA - Class Byte:识别 Applet。( 2)INS - Instruction Byte:定义 Applet 的指令。( 3)P1:第一个命令参数。( 4)P2:第二个命令参数(P1,P2 根据 INS 不同,也有不同的含义)。( 5)Lc:数据(Data Field)的长度。( 6)Data Field:数据的栏位。( 7)Le:回传数据的长度。注意:
8、智能卡程序和网络的小程序都称为 Applet。APDU 响应命令的格式如表 3 所示。2表 3APDU 响应命令的格式选择部分(Conditional Body)必须部分(Mandatory Trailer)Data fieldSW1SW2上述符号表示的意思如下:( 1)Data Field,数据的栏位。( 2)SW1,执行状态参数 1,执行参数由一个字节表示。( 3)SW2,执行状态参数 2。SW1 + SW2 =“9000”表明命令执行成功。应用上述知识,选择 SIM 卡的 ROOT 文件的 APDU 命令的格式如表 4 所示。表 4 ROOT 文件的 APDU 命令的格式CLAINSP1
9、P2LcDataA0A40023F00上述符号表示的意思如下:( 1)A0:表示 SIM 卡。( 2)A4:表示 Select 命令。( 3)P1、P2 为 0,不表示任何意义。( 4)Lc 说明 Data 的长度为 2 个字节。( 5)Data=3F00 是 ROOT 的文件 ID。如果 APDU 响应为 9F1A,说明指令成功完成。1.4Java 智能卡1996 年 11 月,Sun 公司正式发布 JAVA Card1.0 版本的规范。现在 Java 卡的最新的规范是 2.2版。其实 Java 卡的实质是一部功能齐全、但规模较小的电脑,其硬件主要是为了保证 Java 卡的运行环境的需要。其
10、最低的硬件配置要求为:( 1)RAM。最低要求是 512 bytes,用于存放程序执行时的堆栈、暂存资料以及做为 I/O 的缓冲区。( 2)ROM。最低要求是 24KB,用于存放操作系统以及运行环境,如 JCVM(Java 卡虚拟机)。( 3)EEPROM(Electrically-Erasable Programmable Read-Only Memory)。可通过电子设备写入数据的存储器。其最低要求是 8 KB,用于储存开发并装载至 Java 卡上的 Applet。( 4)Processor。最低要求是 8bit,JAVA 卡需要至少 8 位的处理器支持。 Java 智能卡的出现,解决了以
11、前智能卡所不能解决的问题。主要表现为以下几个方面:(1)早期的智能卡的开发是复杂的过程。尽管 ISO7816 标准规定了智能卡的结构大小和通信协议,但各个智能卡生产商对智能卡的研制都各不相同。各个卡生产商对自己的智能卡操作都有自己独特的一套指令集。并且智能卡编程接口(API)非常复杂,为了使用该 API,开发人员需要非常熟悉低层通信接口协议,内存管理和智能卡硬件的细节。最不方便的是,不同的智能卡没有通用的开发环境,如果要开发一种新的应用,那么必须重新学习一个新的开发环境。3Java 卡的出现为不同厂商的智能卡提供了统一的开发环境,95%智能卡制造商已经支持了 Java 卡的 API。应用 Ja
12、va 语言开发的智能卡程序可以应用在所有的 Java 卡上。( 2)Java 是面对对象的编程语言,面向对象的 API 简化了 Java 卡的 Applet 与终端或后台服务器的通信。( 3)由于智能卡程序使用 Java 语言,开发人员可以选择所熟悉和喜欢的开发工具,如 JBuilder。因为可以选择面向对象的开发工具,快速开发和调试 Java 卡的应用程序成为了可能。在以前的智能卡开发环境中,应用程序需要下载到卡的 ROM,而卡的 ROM 程序是无法更新的,所以调试卡的程序将占用大量的开发时间。( 4)Java 卡支持多种用途。Java 卡可以同时存在多个不同的应用,这些应用可以来自不同的卡
13、供应商。例如它可以有电子钱包功能,也可以有身份鉴别功能,也可以有门禁系统功能。(5)Java 卡支持程序的增、删、改操作。Java 卡上的应用可以进行删除或者添加新的应用,不需要更换新的智能卡,大大增强智能卡的灵活性。综上所述,Java 卡的出现统一了智能卡的编程接口(API),统一了智能卡的编程语言(Java 语言),使智能卡成为统一标准的产业,这便是它如何受欢迎的原因。Java 卡内有一个能执行 Java Applet 的虚拟机,它提供 Java 卡编程的 API,使开发人员不需要了解智能卡的硬件和专用技术就可以进行智能卡的应用开发。Java 卡的 Applet 能够在不同卡片的环境执行,
14、通过虚拟机的机制来达到跨平台的能力,这与 Java 语言可以跨平台运行的原理相同。1.5智能卡开发流程图Java 智能卡程序的开发流程图如图 3 所示。.class文件.java文件java命令读卡器JCDK平台的converter.cap文件命令智能卡图 32 安装智能卡的运行环境和运行示例程序2.1下载智能卡的运行环境智能卡的运行环境包括以下文件:( 1)类包 comm.jar,该类包可以为跨平台的信息交流提供技术服务,如智能卡、声音邮件、传真的信息交流。 4 该类包的下载地址是 /products/javacomm/。如图 4 所示。图 4将下载的文件
15、解压后,JavaCommAPI 的目录结构如图 5 所示。图 5javadocs 目 录 是 类 包 的 说 明 文 档 , Samples 是 信 息 交 流 技 术 的 示 例 文 件 。 可 以 在 javacomm20-win32commapi 目录找到类包 comm.jar。( 2)OperCard Framework(OCF1.2)开发工具包下载,该工具包是由 IBM、Sun、Gemplus 等一系列公司共同开发的智能卡标准架构,这个标准应用于各种平台和各种语言,本文所介绍的智能卡开发技术就是基于这个架构。该开发工具包的下载地址是 /in
16、dex-downloads.shtml,如图 6 所示。图 65找到“OpenCard Framework All-in-One”部分,如图 7 所示。图 7单击“installable class file”链接,下载安装的类文件(在下载之前需要注册免费用户)。OCF的安装命令是“java installOCF”。( 3)J2ME 的智能卡开发工具包 Java Card 2.2 Development Kit,该工具包由 Sun 公司提供,下载地址是 /j2me/download.html,找到 Java CardTM Technology 部分(如图 8
17、 所示),单击 Java Card 2.2 Development Kit 链接下载 JCDK 文件。图 8智能卡的运行环境主要由上述 3 个文件组成,这 3 个文件均可以免费获得。2.2安装、设置智能卡的运行环境智能卡运行环境的安装如下:( 1)将 J2ME 的智能卡开发工具包解压,将 java_card_kit-2_2 目录复制到某个盘符的根目录下。CDK(Card Development Kit)的目录结构如图 9 所示。 api_export_files 目录是 JavaCard2.2 的 API 类包的输出文件,这些文件一般很少使用到。 bin 目录是 CDK 的执行命令目录,这些执
18、行命令的使用在 3 节介绍。 doc 目录是 CDK 的使用说明和白皮书,doc 的子目录结构如图 10 所示。图 9图 10guides 目录是使用说明,whitepapers 是白皮书。 lib 目录是 CDK 的运行类包。 samples 目录是 CDK 示例程序。(2)进入 OCF 文件的保存目录(OCF 在 2.1 节的第 2 步下载),使用命令“java installOCF”安装 OCF,安装界面如图 11 所示。图 11在安装的过程中不需要设置任何结构,当遇到这些对话框时,单击“No”按钮,其余的步骤单 6 击“Next”按钮完成 OCF 的安装。OCF 的目录结构如图 12
19、所示。图 12 apidocs 目录是类包的说明文档。 components 目录是 OCF 的结构文件。 demos 目录是 OCF 的示例文件。 lib 目录是 OCF 的运行类包。将 lib 目录的 base-core.jar 和 base-opt.jar 类包复制到 java_card_kit-2_2lib 目录下,因为智能卡的程序需要使用标准架构的类文件。( 3)将类包 comm.jar(在 2.1 节的第 1 步下载)复制到 jdk1.3.1lib 目录,设置包括该类包的ClassPath,如图 13 所示。如果要使用%JAVA_HOME%变量,那么本地机器必须设置 JAVA_HO
20、ME 变量,如图 14 所示。图 13图 14注意:JCDK 的支持平台是 JDK1.3.X 版本或者更低的版本,如果使用 JDK1.4 平台,运行 converter 命令生成 CAP 文件将出现错误。经过上述 3 个步骤已经完成智能卡运行环境的安装,一定要正确摆放 base-core.jar 和 base-opt.jar 类包的位置和正确设置 comm.jar 的 Classpath,下面是设置智能卡的运行环境的步骤:(1)设置 JAVA_HOME 环境变量,如图 14 所示。设置 JAVA_HOME 的作用是可以使用%JAVA_HOME%标识取得 JDK 的路径。注意:如果不懂得环境变量
21、的设置步骤,请参考 1.2 节的内容。(2)设置 JC_HOME 环境变量,如图 15 所示。设置 JC_HOME 的作用和设置 JAVA_HOME 的作用相同。(3)设置 JCDK 工具包的 bin 目录的 Path 参数,如图 16 所示。图 15图 16设置该路径参数的作用是在不同的路径下都可以运行 CDK 的 bin 目录的命令。通过上述 3 个步骤完成 CDK 工具包的环境设置。打开一个 DOS 窗口检查上述的参数是否正确设置。如检查 JC_HOME 参数,键入命令“set JC_HOME”,如图 17 所示。图 172.3运行示例程序在运行示例程序之前,应用“jcwde versi
22、on”命令测试 CDK 平台是否正确安装,如图 18 所示。7如果出现下述错误信息,如图 19 所示。图 18图 19这表示 Classpath 存在空格,如“Program files”字符,修改的办法是使用引号“”将存在空格的路径变量括上,如将 I:Program Filesjrelibcomm.jar 修改为“I:Program Filesjrelibcomm.jar”。在运行示例程序之前,需要运行 java_card_kit-2_2samples 目录的 build_samples.bat 文件,该文件会自动编译 java_card_kit-2_2samplessrc目录下的所有类。运
23、行结果如图 20 所示。图 20( 1)示例程序 1,该示例使用 JavaPurse、JavaLoyalty、Wallet 三个 Applet 文件,模似在一张银行卡取钱和存钱。运行步骤如下:(在运行步骤使用到的命令将在 3 节进行解释) 打开一个 DOS 窗口,进入目录 java_card_kit-2_2samplessrcdemo,键入命令 jcwde jcwde.app命令,jcwde.app 的代码如下:/appletAIDcom.sun.javacard.installer.InstallerApplet0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0x8:0x1com
24、.sun.javacard.samples.JavaPurse.JavaPurse 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x2:0x1 com.sun.javacard.samples.JavaLoyalty.JavaLoyalty 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x5:0x1com.sun.javacard.samples.wallet.Wallet0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x6:0x1运行结果如图 21 所示。图 21注意:0x 是十六进制的表示方法,如 0x1 的十进制数字是
25、 1,如 0xf 的十进数字是 15,如 0xa0 的十进制数字是 160。 另外打开一个 DOS 窗口,进入目录 java_card_kit-2_2samplessrcdemo,键入命令 apdutool -nobanner -noatr demo1.scr demo1.scr.jcwde.out。 8 demo1.src 的部分代码如下(这些代码由 CDK 命令自动生成,该命令在 3 节介绍):/开始处理代码命令powerup;/create JavaPurse 创建 JavaPurse0x80 0xB8 0x00 0x00 0x0c 0x0a 0xa0 0x00 0x00 0x00 0x
26、62 0x03 0x01 0x0c 0x2 0x01 0x00 0x7F;/ create JavaLoyalty 创建 JavaLoyalty0x80 0xB8 0x00 0x00 0x0c 0x0a 0xa0 0x00 0x00 0x00 0x62 0x03 0x01 0x0c 0x5 0x01 0x00 0x7F;/create wallet applet 创建 wallet0x80 0xB8 0x00 0x00 0x14 0x0a 0xa0 0x0 0x0 0x0 0x62 0x3 0x1 0xc 0x6 0x1 0x08 0 0 0x05 0x010x02 0x030x04 0x05
27、 0x7F;/ Initialize Wallet 钱包初始化 /Select Wallet 选择钱包0x00 0xA4 0x04 0x00 0x0a 0xa0 0x0 0x0 0x0 0x62 0x3 0x1 0xc 0x6 0x1 0x7F;/ 90 00 = SW_NO_ERROR/Verify user pin 检查用户号0x80 0x20 0x00 0x00 0x05 0x01 0x02 0x03 0x04 0x05 0x7F; /90 00 = SW_NO_ERROR/Get wallet balance 取得钱包的余额0x80 0x50 0x00 0x00 0x00 0x02;/
28、0x00 0x00 0x00 0x00 0x90 0x00 = Balance = 0 and SW_ON_ERROR/Attemp to debit from an empty account 向余额为 0 的钱包取钱,将产生错误信息 0x80 0x40 0x00 0x00 0x01 0x64 0x7F;/0x6A85 = SW_NEGATIVE_BALANCE/Credit $100 to the empty account 向余额为 0 的钱包存钱0x80 0x30 0x00 0x00 0x01 0x64 0x7F;/0x9000 = SW_NO_ERROR/Get balance 显示
29、余额0x80 0x50 0x00 0x00 0x00 0x02;/0x00 0x32 0x9000 = Balance = 50 and SW_NO_ERROR/ * SCRIPT END *关闭代码的处理 powerdown;运行结果如图 22 所示(智能卡模拟环境只显示 powerdown 命令的运行结果)。图 22apdutool 命令的运行结果如图 23 所示。图 239如 果 成 功 运 行 上 述 程 序 , java_card_kit-2_2samplessrcdemo 目 录 将 增 加 文 件demo1.scr.jcwde.out,该文件的内容应该和 demo1.scr.ex
30、pected.out 文件相同,并且 SW1 和 SW2 的数字是 9000。部分内容如下:CLA: 00, INS: a4, P1: 04, P2: 00, Lc: 09, a0, 00, 00, 00, 62, 03, 01, 08, 01, Le: 00, SW1: 90, SW2:00CLA: 80, INS: b8, P1: 00, P2: 00, Lc: 0c, 0a, a0, 00, 00, 00, 62, 03, 01, 0c, 02, 01, 00, Le: 0a, a0, 00, 00, 00, 62,03, 01, 0c, 02, 01, SW1: 90, SW2: 00
31、CLA: 80, INS: b8, P1: 00, P2: 00, Lc: 0c, 0a, a0, 00, 00, 00, 62, 03, 01, 0c, 05, 01, 00, Le: 0a, a0, 00, 00, 00, 62,03, 01, 0c, 05, 01, SW1: 90, SW2: 00CLA: 80, INS: 20, P1: 00, P2: 00, Lc: 05, 01, 02, 03, 04, 05, Le: 00, SW1: 90, SW2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 67, SW
32、2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 02, 00, 32, SW1: 90, SW2: 00 注意:SW1 和 SW2 是返回命令的组成部分,9000 表示成功执行命令。智能卡的信息以两位十六进制的数字表示。( 2)示例程序 2,该程序的运行代码与示例 1 的运行代码相同,是演示银行卡的借钱和还钱操作,不同的是示例 1 的 JCWDE 环境不能将 Applet 下载到智能卡,示例 2 所使用的 C-JCRE 环境可以将 Applet 下载到智能卡。运行步骤如下: 打开 DOS 窗口,进入 java_card_kit-2_2sam
33、plessrcdemo 目录,键入命令“cref -o demoee”,运行结果如图 24 所示。图 24 打开另一个 DOS 窗口,进入 java_card_kit-2_2samplessrcdemo 目录,键入命令 apdutool -nobanner -noatr demo2.scr demo2.scr.cref.out,如图 25 所示,运行结果如图 26 所示。图 25图 2610如 果 demo2 程 序 成 功 运 行 , 那 么 java_card_kit-2_2samplessrcdemo 目 录 将 添 加 demo2.scr.cref.out 文件,该文件的内容应该和 d
34、emo2.scr.expected.out 文件相同,并且 SW1 和 SW2 的数字是 9000。内容如下:CLA: 00, INS: a4, P1: 04, P2: 00, Lc: 09, a0, 00, 00, 00, 62, 03, 01, 08, 01, Le: 00, SW1: 90, SW2:00CAP file download section. Output suppressed.OUTPUT OFF;OUTPUT ON;Applet creation and functional test section.CLA: 80, INS: 20, P1: 00, P2: 00,
35、Lc: 05, 01, 02, 03, 04, 05, Le: 00, SW1: 90, SW2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 67, SW2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 02, 00, 32, SW1: 90, SW2: 00( 3)示例程序 3,该示例必须在示例 2 之后运行,因为示例 2 的命令“cref -o demoee”输出了 demoee 文件,示例 3 正是以该文件作为智能卡的初始状态。示例 3 的运行步骤如下: 打开 DO
36、S 窗口,进入 java_card_kit-2_2samplessrcdemo 目录,键入命令“cref -i demoee”,运行结果如图 27 所示。图 27 打开另一个 DOS 窗口,进入 java_card_kit-2_2samplessrcdemo 目录,键入命令 apdutool -nobanner -noatr demo3.scr demo3.scr.cref.out,如图 28 所示,运行结果如图 29 所示。图 28图 29程序成功运行后输出文件 demo3.src.cref.out,该文件的内容应该和 demo3.scr.expected.out 文件相同。通过上述示例程序
37、的学习,可以掌握智能卡程序的运行操作。113 智能卡的开发工具智能卡的开发工具是 JCDK(Java Card Development Kits),JCDK 各个命令的结构图如图 30 所示。JCA(Java CardAssembly)文件capgen命令J-JCRE(Java-Java CardExportRuntime Environment)基输出文件CAP(Convertedscriptgen于Java的智能卡运行环境Appletapdu命令执行scriptapdutoolPackages)文件命令命令C-JCRE(C-Java CardRuntime Environment)基于co
38、nverterC语言的智能卡运行环境命令Class类文件Export文件CDK使用C-JCRE环境图 30上述结构图的右边是智能卡的运行环境,本文主要讲解两种运行环境,一种是模拟卡运行环境,另外一种是基于 C 语言的智能卡运行环境,该运行环境最接近真实的运行环境。3.1jcwde 命令jcwde 命令的主要作用是启动 JCWDE(Java Card Workstation Development Environment)智能卡开发环境,应用该命令后系统将虚拟一张智能卡。开发环境不支持如下功能:( 1)类包的安装。( 2)applet 实例的创建与删除。( 3)智能卡状态的保存。( 4)防火墙的
39、设置。( 5)事务操作。( 6)临时数组的清除。( 7)远程方法的激活。1. jcwde 的语法格式 jcwde 的语法格式如下:jcwde -help -p port -version -nobanner 2. 参数的解释参数的解释如下:( 1)help:显示帮助信息。( 2)port:设置开发环境的端口,默认的端口是 9025。( 3)version:显示开发环境的版本号。( 4)nobanner:在 DOS 窗口不显示开发环境的信息。( 5)config-file:保存 Applet 名字和 AID(Application IDentifier 应用 ID)名字的文件。Java卡利用 A
40、ID 识别 Applet,AID 的格式如表 5 所示。12表 5AID 的格式RID(Resource Identifier 供应商 ID) PIX(Proprietary Identifier eXtention 私有扩展 ID)5 字节0-11 字节RID 是 ISO 分配给各个卡供应商的 ID 号,它们是惟一的,而 PIX 是可以由开发者自行定义, AID 只 需 符 合 ISO7816 标 准 的 长 度 规 定 , 而 无 须 向 ISO 申 请 RID 号 。 如 类 包 com.sun.javacard.samples.JavaPurse.JavaPurse 的 AID 是 0
41、xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x2: 0x1。jcwde 的示例命令如下:( 1)jcwde version:显示开发环境的版本号。( 2)jcwde -p 90 jcwde.app:使用端口 90 启动 2.3 节的示例一程序,如图 31 所示。图 313.2cref 命令cref 命令启动基于 C 语言的 JavaCard 运行环境(C-JCRE),该运行环境比 JCWDE 开发环境的功能更全面,接近真实的 Java 卡运行环境,支持 ROM 和 EEPROM,使用 TLP-224 协议和 apdutools 命令通信。使用 cref 命令模拟的 Ja
42、va 卡可以在 EEPROM 写入和读出数据。说明:C-JCRE 环境支持整数变量。1. cref 的语法格式 cref 的语法格式如下: cref 可选参数该命令的所有参数都是可选的。2. 参数的解释cref 的常用参数如下:( 1)e:显示运行时的错误信息。( 2)h:显示帮助信息。( 3)i :从指定的文件取得智能卡的初始状态,文件名不允许存在空格。( 4)nobanner:不显示环境信息。( 5)o :将智能卡的状态保存到文件,文件名不允许存在空格。( 6)p:设置通信端口号。( 7)t:逐行显示命令的执行情况。( 8)z:显示资源的使用情况。cref 的示例代码如下:( 1)cref
43、 -o demoee,初始化智能卡,并将智能卡的状态保存到 demoee 文件。( 2)cref -i demoee,使用 demoee 文件作为智能卡的初始化状态,最后不将更新状态保存在智能卡。( 3)cref -i demoeeIn -o demoeeOut,使用 demoeeIn 文件作为智能卡的初始化状态,最后将更新状态保存在智能卡的文件 demoeeOut 中。cref 的运行效果请参考 2.3 节的示例 2 和示例 3。3.3apdutool 命令如 1.3 节所描述,读卡器与智能卡的通信协议是 APDU,JCDK 平台通过命令 apdutool 向虚拟的智能卡发送命令,并且接收返
44、回命令。 13 1. apdutool 的语法格式 apdutool 的语法格式如下: apdutool 可选参数2. 参数的解释常用的参数解释如下:(1)h:定义主机的名字。(2)help:显示帮助信息。(3)noatr:不显示重置信息(answer to reset)。(4)nobanner:不显示系统信息。(5)o:将 apdu 命令和返回命令保存在一个文件,如果不使用该参数,DOS 窗口将显示这些信息。( 6)p:定义读卡器和智能卡信息交流的 TCP/IP 端口。( 7)s:定义读卡器和智能卡信息交流的并行端口,如 COM1。( 8)version:显示 apdutool 命令的版本信
45、息。( 9):apdu 的命令文件,apdu 的命令格式请参照 1.3 节,apdu 的常用脚本(script)如表 6 所示。表 6 apdu 的常用脚本命令描述delay 定义暂停执行命令的时间,时间单位是微秒echo string在输出的文件中显示信息output off停止信息输出output on恢复信息输出powerdown将关闭电源命令发给智能卡powerup将打开电源命令发给智能卡,该命令必须在执行 apdu 命令之前执行apdutool 的示例代码如下:( 1)apdutool:只连接虚拟的智能卡,不执行任何命令。( 2)apdutool -noatr -nobanner -
46、o demo1.scr.jcwde.out demo1.scr:执行 demo1.scr 文件的命令,并且将命令和返回信息保存在 demo1.scr.jcwde.out 文件中。“o”参数与“”符号的作用相同,但位置不同,“o”参数必须在 apdu 命令文件之前,而“”符号必须在 apdu 命令文件之后。3.4converter 命令converter 命令可以由 class 文件创建 CAP、EXP、JCA 三种类型的文件。1. converter 的语法格式 converter 的命令格式如下所示:converter 可选择参数 . converter 命 令 必 须 使 用 三 个 参
47、数 , 分 别 是 package_name 、 package_aid 和.,它们的解释如下:( 1)package_name:类包的名字,如 com.sun.javacard.samples.HelloWorld。( 2)package_aid:类包的标识,如 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x1,该标识便是上述类包的标识。( 3).:表示类包的版本号,如 1.0。需要注意的是版本号的表示必须是 2 个整数加上一个“.”号。2. 参数的解释converter 的常用参数如下:( 1)applet :定义类包内的 Applet 的 AID 和名字。( 2
48、)classdir:定义类包的位置,如 com.sun.javacard.samples.HelloWorld 类包,可以使用 -classdir J:java_card_kit-2_2samplessrc com.sun.javacard.samples.HelloWorld 表示类包,通过这种 14 方法,便可以在任何地方使用 converter 命令编绎该类包。( 3)d:定义输出文件的路径。( 4)exportmap:使用前面编绎类包的 exportpath 设置。( 5)exportpath:定义编译需要的 EXP 文件的位置,使用 converter 命令编绎文件,需要 java.
49、lang、 javacard.framework 和 javacard.security 的 EXP 文 件 支 持 。 这 些 文 件 的 目 录 是java_card_kit-2_2api_export_files。( 6)v 或者 version:显示编译时的详细信息。( 7)nobanner:不显示系统的环境信息。( 8)out CAP EXP JCA:定义输入的文件,如果只使用 CAP,那么只输出 CAP 文件,如果使用 3 个参数,那么输出 3 个文件。上述参数命令也可以放入一个文件,代码如下:-out EXP JCA CAP -exportmap-applet 0xa0:0x0:
50、0x0:0x0:0x62:0x3:0x1:0xc:0x1:0x1 com.sun.javacard.samples.HelloWorld.HelloWorldcom.sun.javacard.samples.HelloWorld 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x1 1.0使用 converter -config HelloWorld.opt 命令使用上述参数文件。 converter 命令的示例代码如下:converter-out EXP JCA CAP -exportpath .classes-applet 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x1:0x1 com.sun.javacard.samples.HelloWorld.HelloWorld com.sun.javacard.samples.HelloWor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字智慧方案食品安全追溯系统建设方案
- 2024年家具、建筑用金属附件及架座投资申请报告代可行性研究报告
- 供电防护员练习试题(一)
- 金榜题名感谢恩师升学宴十年寒窗苦读一朝金榜题名
- 2023年高考全国甲卷数学(理)真题
- 盈余管理视角下的股权激励与公司绩效的实证研究
- 职业资格-公路水运公共基础真题库-2
- 会计政策选择的影响因素考察试题及答案
- 法律考研试题及答案
- 三坐标考试试题及答案
- 电大《管理英语3》1-8单元试题附答案
- 带状疱疹性脑膜脑炎的治疗及护理
- 2023年扩散膜行业市场需求分析报告及未来五至十年行业预测报告
- 老年患者预防烫伤
- 2024年江苏绿色东海投资发展集团有限公司招聘笔试参考题库附带答案详解
- GB/T 43564-2023中小学合成材料面层田径场地
- 知行合一:王阳明传
- 广告宣传栏及雕塑采购项目服务投标方案(技术标)
- 国开《Windows网络操作系统管理》形考任务4-配置故障转移群集服务实训
- 波浪理论基础图解
- 角的度量说课PPT
评论
0/150
提交评论