近来项目要做CPU卡的开发,如果用真实的CPU卡测试,多次操作错误后卡会被锁死,既浪费资源也不利于开发。因此想到是否有模拟的智能卡操作呢,网上一搜还真有,用Java模拟智能卡,叫做“Java Card”开发。
-
环境搭建
网上介绍的资料比较乱,大体归纳起来主要是给Eclipse安装两个插件: JCOP和JCDE插件。关于这两个插件的安装可以参考博文“JavaCard开发环境搭建” https://blog.csdn.net/jiangbo1984/article/details/50920926
这里需要说明的是这两个插件对应的是两种开发方式,使用其中一种即可,也可以两种都安装。其中的eclipse-jcde-0.2.zip可以使用在新版本的JDK和Eclipse上(我的64位JDK1.8和Eclipse-Mars测试是没问题的,关于这种方式在以后的文章里再介绍)。
对于下载的JCOP Tools插件,使用就比较悲剧了,按照网上的文章介绍,把下载的com.ibm.bluez.jcop.eclipse_3.1.2.zip文件解压后,plugins目录下的com.ibm.bluez.jcop.eclipse_3.1.2文件夹拷贝到Eclipse的plugins目录下,features目录下的com.ibm.bluez.jcop.eclipse_3.1.2文件夹拷贝到Eclipse的features目录下,再把com.ibm.bluez.jcop.eclipse.prefs文件拷贝到工作空间workspace.metadata.plugins\org.eclipse.core.runtime.settings目录下,然后打开Eclipse软件,并没有看到新建工程里有Java Card类型。按照网上说的打开命令行,在Eclipse所在目录,输入命令“eclipse -clean”启动,结果发现插件还是没有显示:
想起来网上说的必须得使用JDK1.5,便决定换JDK1.5试试,下载网址:https://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html
这里下载的是32位版本jdk-1_5_0_22-windows-i586-p.exe文件(64位的试过了也不行)。因为我电脑C盘已经安装JDK1.8了,这里把JDK1.5安装到D:\Program Files (x86)\Java目录下:
为安全起见,查询一下java版本,没有“64 bit”字样就是32位的(之前就被网上坑了,说是32位版本,结果不能用,一查版本信息是64位的):
问题又来了,新的Eclipse还不支持JDK1.5,看来这个插件很老了,网上说新版本已经收费了。没办法只能下载再老点的Eclipse,juno版本正好最低要求JDK1.5,下载网址:https://www.eclipse.org/downloads/packages/release/
把下载的eclipse-jee-juno-SR2-win32.zip解压到D盘,如果直接启动,还是用默认的JDK1.8,这里需要指定使用JDK1.5启动,修改eclipse.ini文件,注意路径一定要对应好:
然后又按照上述步骤安装一遍com.ibm.bluez.jcop.eclipse_3.1.2插件,结果还是显示不了。难道Eclipse版本还是新,没办法,又下了一个indigo版本,文件为eclipse-jee-indigo-SR2-win32.zip。这次再安装一遍com.ibm.bluez.jcop.eclipse_3.1.2插件,这次终于成功了:
真不容易啊,赶紧创建一个工程试一下吧。 -
新建工程测试
新建一个项目,选择“Java Card Project”类型,然后输入工程名称:
下一步,选择对应的配置信息,先按默认的来吧:
再下一步,注意要选择一个模板,否则建立的是一个空项目:
然后输入包名和类名:
下一步,输入Package AID和Applet AID,这个对应是卡的开发商的编号,格式有要求的,不能随便输入:
点击完成,系统会自动创建一个简单的应用:
-
运行测试
运行一下吧,右键项目选择Run configurations…,新建一个配置:
选择Generic JCOPv2.2.1:
然后点击“Run”运行:
说明启动成功了,下面输入“/select+AID”命令选择我们模拟的卡,这里的AID要替换为建立工程时输入的Applet AID:
卡选择成功后,就可以使用“/send APDU”发送APDU命令了。发送什么好呢,看CPU卡初始化时有个“选择3F00文件 00A40000023F00”步骤,测试一下吧:
呀,指令不被支持啊,看看代码里有这行:
看来还得自己处理啊,以后有时间再说吧,今天先写到这里。。。