javaCard技术简介

JavaCard是基于Java的智能卡技术,其应用层包括由用户实现的applet。JCRE层是核心,由JAVA和C编写。JavaCard使用资源受限的Java子集,不支持字符串和多线程。Applet生命周期始于下载,止于删除,激活状态在选择时保持。APDU定义了主机与卡之间的交互协议。文章讨论了JavaCard的特性、生命周期及APDU通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是javaCard:

JavaCard 基于Java平台的智能卡技术


java card 的架构

应用层:

所有applet应用,主要是由卡用户实现,通过调用Java相关规范定义的API实现不同的应用

JCRE层:

是智能卡系统的核心(JCRE是用两种语言编写的:JAVA 和C

系统硬件层:

虚拟机执行的硬件平台


javaCard与普通java开发有什么不同呢?

java card支持的java语言不是标准的java语言,相当于他的子集,主要是考虑Java卡是一个资源极其受限的系统,不支持字符串也不支持多线程。没有像boolean和Integer这样的包装类,也没有Class和System类

javaCard VM生命周期

与卡片生命周期一致,当卡片丢失与毁坏生命周期结束,当卡片掉电,ram中的数据将会丢失,但是rom中的将会保留

javaCard applet生命周期

开始于被下载到javaCard上开始,然后安装于javaCard,结束于applet被删除并注销,当卡片接受到选择这个applet的apdu命令才被激活,激活状态一致保持到掉电,或选择另一个applet时

事务处理机制

JCRE支持原子事务,原子事务用于安全地更新一个或多个持久对象。如果发生掉电或者程序错误等情况,事务将保护数据的完整性。事务是在系统级支持的。

Java Card事务以对beginTransaction()的调用开始,以对

commitTransaction()或者abortTransaction()的调用结束。在事务过

程中所有的写操作都将被保护。JCRE不支持嵌套事务。

为了方便理解,可以把卡当做一个具有运算功能的主机,读卡器这一端相当于I/O设备,对主机进行操作(通过ADPU通信实现)。

javaCard applet编译下载过程

APDU

定义了主机和JAVA卡之间交互的数据格式,绝大部分卡片遵循此数据格式,当然为了保密或其它原因是可以自定义新的数据格式。APDU分为发送命(C-APDU)和返回命令(R-APDU)是用来向卡发送命令和从卡接收数据的协议。

发送命令(C-APDU)的格式,包含一个必须头部段和一个可选数据段

返回命令(R-APDU)的格式,包含一个可选数据段和一个必须状态值:

具体相关内容可以看我的关于apdu命令的指令

如果你对javaCard技术感兴趣,可以多去看一些资料,以及自己开发一下应用加深对javCard技术的理解。

javacard applet 开发实例 正常运行 带jar包 package mifare; import com.ibm.jz.JZSystem; import javacard.framework.APDU; import javacard.framework.Applet; import javacard.framework.ISO7816; import javacard.framework.ISOException; import javacard.framework.Util; public class AmbiqApplet extends Applet { byte[] mifarePassDefault={(byte)0x0b,(byte)0x54,(byte)0x57,(byte)0x07,(byte)0x45,(byte)0xfe,(byte)0x3a,(byte)0xe7}; byte[] mifarePass8={(byte)0x0b,(byte)0x54,(byte)0x57,(byte)0x07,(byte)0x45,(byte)0xfe,(byte)0x3a,(byte)0xe7}; byte[] mifarePass9={(byte)0x0b,(byte)0x54,(byte)0x57,(byte)0x07,(byte)0x45,(byte)0xfe,(byte)0x3a,(byte)0xe7}; byte[] adminPass={(byte)0x40,(byte)0x41,(byte)0x42,(byte)0x43,(byte)0x44,(byte)0x45,(byte)0x46,(byte)0x47,(byte)0x48,(byte)0x49,(byte)0x4a,(byte)0x4b,(byte)0x4c,(byte)0x4d,(byte)0x4e,(byte)0x4f}; public static void install(byte[] bArray, short bOffset, byte bLength) { // GP-compliant JavaCard applet registration new AmbiqApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]); } public void process(APDU apdu) { short i; byte[] send=new byte[52]; byte[] send2=new byte[24]; // Good practice: Return 9000 on SELECT if (selectingApplet()) { return; } byte[] buf = apdu.getBuffer(); if(buf[ISO7816.OFFSET_CLA]==AmbiqConstant.CLS_AMBIQ) { switch (buf[ISO7816.OFFSET_INS]) { case AmbiqConstant.INS_GET_MIFARE: if(buf[ISO7816.OFFSET_P1]!=0 || buf[ISO7816.OFFSET_P2]!=0) { ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2); return; } /*Get Entire Mifare Ticket data * Returns back the content of the entire sector 8 (3 block 8.0, 8.1, 8.2) and the first 4 bytes of block 9.0; total 52bytes. Filed Length (in bytes) Data Comments CLA 1 0x80 Fixed class for the applet INS 1 0x20 Read entire data P1 1 0x00 Sector number P2 1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值