Java Card Applet Development——环境搭建及基础概念(JCDK v2.2.2&v3.0.0.5)

本文改编自:http://www.dreamingfish123.info/?p=580,旨在对原文进行扩展,对JCDK v3.0.0.5的情况进行说明。

JAVA CARD技术基本概念

Java Card是基于硬件与应用的要求所开发的技术,目的是使得Java技术能够再如同smart card芯片般大小的有限资源下执行,是能运行Java程序的智能卡。Java Card技术提供了一种开放式开发构架,现在的智能卡开发者可以开发出在多种智能卡上应用的程序,不同的应用程序可以在同一个卡片上运行。

从一个 applet 的编写、编译、转换、部署、使用的过程看,会是这样的与脚本相关的过程:

  1. javac – 编译 *.java
  2. converter – 生成 cap, jca, exp
  3. genscript – 由 cap 文件产生 scr 脚本
  4. apdutool – 利用 scr 脚本,将 applet 部署到卡(虚拟机的 eeprom文件)中
  5. apdutool – 利用虚拟机测试 applet

JAVA CARD DEVELOPMENT TOOLS

目前Oracle已经提供了所有开发Java Card Applet所需要的tools、libraries和一系列的APIs,最多使用的是2.2.1和2.2.2版本。

Note: 目前还不需要用到JCDK 3.x,因为还没有实体java卡支持其开发,而在没有可以实时部署和测试的环境的情况下,去学习这个版本试没有意义的。

JCDK中包含Converter、APDUTool、ScriptGen等重要的工具,还提供两个Java智能卡运行环境的仿真工具Cref和JCWDE,通过这两个工具,无需读/写器和智能卡卡片,开发人员可以在PC软件平台上模拟Java智能卡的运行,进行Applet的调试运行。


JAVA CARD APPLET STRUCTURE

几个比较重要的functions:

public static void install(byte[] bArray, short bOffset, byte bLength){}
public void process(APDU apdu){}
protected final void register(){}
//or protected final void register(byte[] bArray, short bOffset, byte bLength){} throws SystemException public boolean select(){}

  • install( ):构建了Applet子类的实例,JCRE将会最先调用这个;所有的初始化和分配内存的操作应该在这个里面实现;可以获取卡外实体传进来的一些应用初始化参数。
  • process( ):类似于正常java class的main,在安装后,APDU的执行将在这里实现。
  • register( ):applet用来在JCRE中注册该applet实例。
  • register(parameters):和register( )功能一样,增加了可以分配其特定的AID的功能。
  • select( ):JCRE一旦接收到SELECT[by name]命令时,将寻找命令中指示的AID对应的Applet,使之处于活跃状态,接收并处理接下来的APDU命令;在选择新的Applet前,JCRE先调用当前Applet的 deselect 方法;Applet可以拒绝被选择,此时 select 方法返回false;SELECT[by name]命令本身也将传递给applet处理,此时通过 selectingApplet 用以判断当前状态。

ECLIPSEJCDE

开发环境搭建
  1. 在Sun/Oracle官网上下载 Java Platform 1.5(JDK) (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
  2. 在Sun/Oracle官网上下载 Java Card Development Kit v2.2.2 (JCDK)(http://www.oracle.com/technetwork/java/javame/javacard/download/devkit/index.html),解压到 “java-card-dev-kit-root”,例如“C:\java_card_kit-2_2_2”
  3. 解压“java-card-dev-kit-root/java_card_kit-2_2_2/java_card_kit-2_2_2-rr-bin-windows-do.zip”到“java-card-dev-kit-home”,例如“C:\java_card_kit-2_2_2-windows\java_card_kit-2_2_2”
  4. 下载eclipse 4.3 (http://www.eclipse.org/downloads/),将其内容解压到“eclipse-root”,例如“C:\eclipse”
  5. 下载EclipseJCDE(http://sourceforge.net/projects/eclipse-jcde/files/),将其内容解压到“eclipse-root”
  6. 启动eclipse
  7. 菜单栏中“Java Card” => “Preferences”
  8. 点击“Browse”,指向“java-card-dev-kit-home”路径
注意:JCDK v3.0.0.5中不需要进行第5步下载SDK,官网上下载的SDK包已经包含了eclipse 插件(目录为:Java Card Development Kit 3.0.5u1\eclipse-plugin) ,直接可以使用eclipse进行安装。

Tools
  1. “Set Package AID”:设定选中包的AID,这个AID将会在生成CAP文件和APDU脚本、以及将该包安装到模拟器中时用到。
  2. “Set Applet AID”:设定选中的Java Card Applet的AID
  3. “Convert”:将Java Card package转换为CAP文件;可以选择是否同时生成EXP文件和JCA文件。
    • CAP文件:转化后的applet文件,可被JAVA卡装载并安装的可执行代码
    • EXP文件:输出文件,包含JAVA卡包的公共信息和连接信息
    • JCA文件:可读汇编语言,由转换器生成,可进一步生成CAP文件
  4. “Generate Script”:生成APDU脚本文件*.script
  5. “Run Script”:发送APDU脚本文件中的APDU命令到模拟器中。
模拟器
  1. “CREF”:是一个C语言实现的参考JCRE的模拟器,但不支持Java Card应用运行在debug模式。
  2. “JCWDE”:Java Card Workstation Development Environment,是另一个模拟器,其支持Java Card应用运行在debug模式下。它是一个模拟了JCRE的java应用,但少了其中一些特征。
验证

EclipseJCDE提供了一组编译时验证,当Java Card应用程序在安装或运行在模拟器上时验证Java卡项目的一致性,避免运行时错误。

EclipseJCDE提供以下的验证:

  1. “Applet AID validation”:检查所有Java卡项目中的Java Card applet是否都有applet AID。
  2. “Package AID validation”:检查所有Java卡项目中的包是否都有package AID。
  3. “Duplicate AID validation”:检查所有Java卡项目以防有重复的AID。

开发实例-HELLOWORLD

Applet实现功能:将所有发送给此Applet的命令原封不动的返回给卡外应用。

该sample以CREF作为模拟器,用两种方法实现整个开发流程:Eclipse+JCDE 和 CMD

  • Eclipse+JCDE是利用Eclipse上添加JCDE插件以便于Applet开发。
  • CMD即所有compiling、converting等过程都在命令行下进行,可以在没有IDE的情况下完成Applet的开发。需要预先设置好环境变量
注意:eclipse中运行模拟器环境时不要点击右键-->Run As-->Java Card Projec运行,这样运行没有启动正确的模拟器,
应该点击右键-->Run As --> Run Configurations,设置如下图所示,点击run运行。



例如javacard_env.bat

1
2
3
4
5
@ echo off
set JC_HOME=C:\java_card_kit-2_2_2-windows\java_card_kit-2_2_2
set JAVA_HOME=C:\jdk1.5.0_22
set PATH=.;%JC_HOME%\bin;%JAVA_HOME%\bin;%PATH%
set CLASSPATH=%JC_HOME%\lib\api.jar;%CLASSPATH%

Note:jdk的路径最好不要有空格,默认是装到”program files”目录下,这就有空格,会导致后面一些命令出错。

Compiling

编译sample applet中的java源代码:

  • Eclipse+JCDE: 若Project – Build Automatically为选中状态,则此时源代码已经编译好。
  • CMD:
    1
    javac -g HelloWorld.java
Converting

转换class文件,生成 .cap, .exp, .jca文件,其中 .cap 文件是实际加载安装到java card中的文件。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值