如何使用Java Card读写存储姓名?附示例(基于JCIDE 5.0)
Java Card 姓名存储与读取实现指南(JCIDE 5.0)
核心思路
- 利用Java Card的持久化存储(
byte[]数组)保存姓名的字节数据(需统一编码,如UTF-8) - 定义两类APDU指令:一类用于写入姓名数据,一类用于读取已存储的姓名
- 在Applet的
process方法中处理指令,完成存储与读取逻辑
代码实现
完整Applet代码
package com.example.namecard; import javacard.framework.*; public class NameCardApplet extends Applet { // 指令定义:写入姓名/读取姓名 private static final byte INS_WRITE_NAME = (byte)0x01; private static final byte INS_READ_NAME = (byte)0x02; // 持久化存储姓名的字节数组 private byte[] name; private NameCardApplet() {} public static void install(byte[] bArray, short bOffset, byte bLength) { new NameCardApplet().register(); } public void process(APDU apdu) { if (selectingApplet()) { return; } byte[] buffer = apdu.getBuffer(); byte ins = buffer[ISO7816.OFFSET_INS]; switch (ins) { case INS_WRITE_NAME: writeName(apdu); break; case INS_READ_NAME: readName(apdu); break; default: ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); } } private void writeName(APDU apdu) { byte[] buffer = apdu.getBuffer(); short dataLen = apdu.setIncomingAndReceive(); // 初始化/扩容存储数组,保证持久化 if (name == null || name.length < dataLen) { if (name != null) JCSystem.requestDeletion(name); name = new byte[dataLen]; JCSystem.makePersistent(name); } // 复制输入数据到存储数组 Util.arrayCopy(buffer, ISO7816.OFFSET_CDATA, name, (short)0, dataLen); ISOException.throwIt(ISO7816.SW_NO_ERROR); } private void readName(APDU apdu) { byte[] buffer = apdu.getBuffer(); if (name == null || name.length == 0) { ISOException.throwIt((short)0x6A83); // 无存储数据 } // 复制存储数据到APDU缓冲区并返回 short len = (short)name.length; Util.arrayCopy(name, (short)0, buffer, (short)0, len); apdu.setOutgoingAndSend((short)0, len); } }
JCIDE 5.0 操作流程
- 创建新Java Card项目,选择适配的Java Card版本(推荐3.0.5及以上)
- 将上述代码放入项目包路径下,编译生成CAP文件
- 启动JCIDE模拟器,加载生成的CAP文件并选择Applet
- 发送APDU命令测试:
- 写入姓名示例:
00 01 00 00 05 4A 6F 68 6E 44(存储"JohnD",UTF-8字节长度5) - 读取姓名示例:
00 02 00 00 00,模拟器会返回存储的字节数组,转码后即可得到姓名字符串
- 写入姓名示例:
关键注意事项
- 姓名转字节数组时需固定编码(如UTF-8),写入与读取阶段编码必须一致
- 处理APDU数据时要校验长度,避免数组越界
- 若读取时返回
6A83,说明卡内无已存储的姓名数据
内容的提问来源于stack exchange,提问作者bujji
相关产品推荐
相关产品推荐

