java card applet_Java Card 技术简介:第 2 部分,Java Card Applet

开发 Java Card 应用程序 创建 Java Card 应用程序的典型步骤如下: 编写 Java 源代码。 编译 源代码。 将类文件 转换 为 Converted Applet(CAP)文件。 验证 CAP 是否有效;此步骤为可

开发 Java Card 应用程序

创建 Java Card 应用程序的典型步骤如下:

编写 Java 源代码。

编译 源代码。

将类文件 转换 为 Converted Applet(CAP)文件。

验证 CAP 是否有效;此步骤为可选。

安装 CAP 文件。

使用 Java 程序设计语言开发传统程序时,前两个步骤是相同的:编写 .java 文件并将它们编译为 .class 文件。虽然您已经创建了 Java Card 类文件,但是该过程仍可改变。

Java Card Virtual Machine(JCVM)被划分为卡片外部 JVM 和卡片内部 JVM。这种划分移除了开销较大的卡片外部操作,并且考虑到了卡片内部的内存占用量较小,但是这会导致开发 Java Card 应用程序的步骤增加。

将 Java Card 类载入 Java Card 设备之前,必须将它们转换为标准的 CAP 文件格式,然后选择性地进行验证:

转换时必须将每个 Java 软件包转换为 CAP 文件,其中一个软件包中包含了类和接口的联合二进制表示法。转换是一项卡片外部的操作。

验证是一个可选过程,目的是验证 CAP 文件结构、有效的字节码子集、软件包之间的依赖关系。您可能想对要使用的第三方供应商的软件包进行验证,或者,如果您的转换器工具由第三方供应商提供,您希望对其进行验证。验证通常是一个卡片外部的操作,但是一些卡片产品可能包含机载的检验器。

完成验证之后,便可以将 CAP 安装到 Java Card 设备中了。

Sun Java Card 开发工具箱

您可以使用 Sun Java Card 开发工具箱编写 Java Card applet,甚至在没有智能卡或卡片读取器的情况下对它们进行测试。该工具箱包含了需要开发和测试 Java Card applet 的所有基本工具:

Java Card 工作站开发环境(JCWDE)是一个方便且易于使用的 Java Card 模拟工具,使开发人员无需转换和安装 CAP 文件而直接执行类文件。JCWDE 可以使用调试器和 IDE 进行集成。

从这个开发工具箱的2.2.1版本开始,,JCWDE 支持 Java Card RMI(JCRMI)。请注意 JCWDE 不是一个成熟的 Java Card 仿真器。它还不支持 JCRE 的许多功能,例如软件包安装、applet 实例创建、防火墙和事务。要了解更多信息,请参考开发工具箱的《用户指南》。

C 语言 Java Card 运行时环境(C-JCRE)是一个用 C 语言编写的可执行参考实现。C-JCRE 是 Java Card API、VM 和运行时环境的完全兼容的实现。它能让开发人员在工作站环境下准确地测试 applet 的行为。

C-JCRE 的限制很少:在卡片会话期间,它支持多达 8 个可以返回的远程引用、多达 16 个可以同时导出的远程对象、在远程方法中多达 8 个数组类型的参数、多达 32 个受支持的 Java 软件包和多达 16 个的 Java Card applet。要了解关于限制方面的更多信息,请参考《 Java Card 开发工具箱用户指南》。

Java Card 转换工具,用于生成 CAP 文件。

Java Card 检验器,用于可选地检查 CAP 和导出文件的有效性。

一个用于发送和接收应用程序协议数据单元(APDU)的 APDU 工具(apdutool)。这就是测试期间如何将 APDU 发送给 Java Card applet 的过程。您可以创建 apdutool 读取的脚本文件,以便将 APDU 发送到 C-JCRE 或 JCWDE。

一个 capdump工具,用于转储 CAP 的内容和一个打印 EXP 文件的 exp2text。

一个 scriptgen 工具,用于将 CAP 文件转换为 APDU 脚本文件。该工具简称为卡片外部安装程序。

支持库(用于 Java Card API 的类文件和导出文件)、文档和示例。

虽然 Sun Java Card 开发工具箱允许编写并测试 Java Card applet,部署真正的端到端智能卡应用程序却要求这些工具不被包含在开发工具箱内,例如:像 OpenCard 和 Global Platform API 这样的终端 API 的使用。可能还要求使用像用户识别模块(Subscriber Identification Module,SIM)这样的工具箱来帮助你管理 SIM。

表 1 显示了工具箱的目录结构(Windows 版本),以及包含开发工具的 bin 目录内容。

图 1a. 开发工具箱目录结构

图 1b. Bin 目录的内容

现在让我们重新访问 Java Card 开发步骤,记住这次要使用 Sun Java Card 开发工具箱:

使用您喜欢的编辑器或 IDE 编写 Java 源代码。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

weixin_39623350

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值