Java Card开发指南(一)

标签(空格分隔): Java 智能卡


以下将要进行的是基于Java Card的智能卡开发学习,第一次我们先来熟悉开发环境。其实卡开发的工作可以看做单片机的开发工作,智能卡已经不是你想象的那样只有记忆和简单运算功能。真正的智能卡,虽然运算能力有限,但其搭载的卡操作系统,可以实现一些嵌入式开发的功能,如计算器啦等等。为了理解方便,你可以把卡当做一个具有运算功能的主机,读卡器这一端相当于I/O设备,对主机进行操作(通过ADPU通信实现)。下面先进行的是卡开发环境的搭建:

安装JDK

这一步不再详述,具体请参照Java开发的相关参考资料。需要注意的是,同Java环境配置过程一样,千万不要忘记配置环境变量Path以及CLASSPATH,这里将JDK和JCDK的环境变量写在了一起,各位请根据自己的需要进行修改:

#JDK和JCDK的Path
C:\Program Files\Java\jdk1.8.0_121\bin;
C:\Program Files\Java\jdk1.8.0_121\jre\bin;
D:\Program Files (x86)\eclipse\java_card_kit-2_2_2-windows\java_card_kit-2_2_2\java_card_kit-2_2_2-rr-bin-windows-do\bin;
#JDK和JCDK的ClASSPATH
C:\Program Files\Java\jdk1.8.0_121\lib\dt.jar;
C:\Program Files\Java\jdk1.8.0_121\lib\tools.jar;
D:\Program Files (x86)\eclipse\java_card_kit-2_2_2-windows\java_card_kit-2_2_2\java_card_kit-2_2_2-rr-bin-windows-do\lib\api.jar

下载JCDK

这就是卡开发环境了,这里给出的JCDK版本为JDCK2.2.2
设置环境变量的工作在上一节已经讲述完毕,这里不再赘述。

安装Eclipse

这一步也和Java开发类似,并没有什么技术含量,将其下载至本地解压即可。安装后启动一次设置好工作目录workspace,以便于接下来的工作开展。

安装JCOP

这个插件是为了在Eclipse中调试卡使用,据说现在收费了。给一个JCOP的外链JCOP Eclipse javacard 插件
下载完成后,将其解压到对应的Eclipse下目录/plugins,同时将文件名为com.ibm.bluez.jcop.eclipse.prefs拷贝至Eclipse工作目录workspace下的.metadata.plugins\org.eclipse.core.runtime.settings目录

安装JCDE插件

这个插件的作用是为了方便在IDE中进行调试,同样将其解压到对应Eclipse下目录/Plugins,然后启动Eclipse,这时菜单栏多出三个菜单选项CREF、Java Card、JCWDE。点击JavaCard->Preferences,将JavaCardHome设置为JCDK所在目录如:

D:\Program Files (x86)\eclipse\java_card_kit-2_2_2-windows\java_card_kit-2_2_2\java_card_kit-2_2_2-rr-bin-windows-do\bin;

运行第一个demo

新建一个Java Card Project,这里命名为hellojavacard,然后新建一个Java Card Applet,这里命名为Appletcard。Applet代码如下:

package hellojavacard;

import javacard.framework.APDU;
import javacard.framework.ISO7816;
import javacard.framework.Applet;
import javacard.framework.ISOException;

public class Appletcard extends Applet {

    private Appletcard() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength) throws ISOException {
        new Appletcard().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
    }

    public void process(APDU apdu) {
        if (selectingApplet()) {
            return;
        }

        byte[] buf = apdu.getBuffer();
        switch (buf[ISO7816.OFFSET_INS]) {
        case (byte) 0x00:
            break;
        default:
            ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
        }
    }

}

回到界面左侧,点击hellojavacard所在的包,然后点击菜单栏Java Card->Convert,这时候会生成卡平台的一个重要文件以*.cap为后缀,同时还有其他文件用途如下所示。对于Java Card这个菜单选项,各个按钮的作用如下:

“Set Package AID”:设定选中包的AID,这个AID将会在生成CAP文件和APDU脚本、以及将该包安装到模拟器中时用到。
“Set Applet AID”:设定选中的Java Card Applet的AID
“Convert”:将Java Card package转换为CAP文件;可以选择是否同时生成EXP文件和JCA文件。
CAP文件:转化后的applet文件,可被JAVA卡装载并安装的可执行代码
EXP文件:输出文件,包含JAVA卡包的公共信息和连接信息
JCA文件:可读汇编语言,由转换器生成,可进一步生成CAP文件
“Generate Script”:生成APDU脚本文件*.script
“Run Script”:发送APDU脚本文件中的APDU命令到模拟器中
“Deploy”:部署嘛,当然是把CAP写到卡上啦(这里的卡是JCWDE模拟的)
“Instantiate Applet”:和上面差不多?实例化Applet,应当是包括了激活工作

这些按钮其实是和JCDK中几个工具Converter、ADPUTool、ScriptGen一一对应的。我们点击JCWDE->Start,模拟一张卡片。然后再进行上面几个操作就可以啦。这里以运行脚本cap-download.script为例。点击IDE右下角的console图标切换console,就可以看到以下输出内容:

Java Card 2.2.2 APDU Tool, Version 1.3
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
Opening connection to localhost on port 9025.
Connected.
Received ATR = 0x3b 0xf0 0x11 0x00 0xff 0x00 
CLA: 00, INS: a4, P1: 04, P2: 00, Lc: 09, a0, 00, 00, 00, 62, 03, 01, 08, 01, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b0, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 01, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 01, P2: 00, Lc: 17, 01, 00, 14, de, ca, ff, ed, 01, 02, 04, 00, 01, 0a, 01, 02, 03, 04, 05, 06, 07, 08, 09, 00, Le: 00, SW1: 64, SW2: 3a
CLA: 80, INS: bc, P1: 01, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 02, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 02, P2: 00, Lc: 20, 02, 00, 1f, 00, 14, 00, 1f, 00, 0f, 00, 15, 00, 1e, 00, 0c, 00, 3f, 00, 0a, 00, 0b, 00, 00, 00, 4d, 00, 00, 00, 00, 00, 00, 02, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 02, P2: 00, Lc: 02, 01, 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 02, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 04, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 04, P2: 00, Lc: 18, 04, 00, 15, 02, 03, 01, 07, a0, 00, 00, 00, 62, 01, 01, 00, 01, 07, a0, 00, 00, 00, 62, 00, 01, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 04, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 03, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 03, P2: 00, Lc: 12, 03, 00, 0f, 01, 0b, 01, 02, 03, 04, 05, 06, 07, 08, 09, 00, 00, 00, 08, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 03, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 06, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 06, P2: 00, Lc: 0f, 06, 00, 0c, 00, 80, 03, 00, ff, 00, 07, 01, 00, 00, 00, 1c, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 06, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 07, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 07, 00, 3f, 00, 01, 10, 18, 8c, 00, 00, 7a, 05, 30, 8f, 00, 01, 3d, 8c, 00, 02, 18, 1d, 04, 41, 18, 1d, 25, 8b, 00, 03, 7a, 02, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 21, 18, 8b, 00, 04, 60, 03, 7a, 19, 8b, 00, 05, 2d, 1a, 04, 25, 73, 00, 0b, 00, 00, 00, 00, 00, 09, 70, 08, 11, 6d, 00, 8d, 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 02, 06, 7a, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 07, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 08, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 08, P2: 00, Lc: 0d, 08, 00, 0a, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 08, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 05, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 05, P2: 00, Lc: 20, 05, 00, 1e, 00, 07, 06, 80, 03, 00, 01, 00, 00, 00, 06, 00, 00, 01, 03, 80, 03, 02, 03, 80, 03, 03, 03, 80, 0a, 01, 06, 80, 07, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 05, P2: 00, Lc: 01, 01, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 05, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b2, P1: 09, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: b4, P1: 09, P2: 00, Lc: 0e, 09, 00, 0b, 00, 00, 00, 07, 05, 06, 04, 0a, 07, 07, 15, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: bc, P1: 09, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
CLA: 80, INS: ba, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容