java卡 如何读写
Java卡读写操作指南
Java卡(Java Card)是一种支持Java语言开发的智能卡技术,广泛应用于安全领域。以下是Java卡的基本读写操作方法:
连接Java卡设备
使用PC/SC读卡器或支持Java卡的设备建立连接。在Java中可通过javax.smartcardio包实现:
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("T=1");
CardChannel channel = card.getBasicChannel();
发送APDU指令
Java卡通过APDU(Application Protocol Data Unit)协议通信。基本命令结构:

byte[] commandAPDU = {
(byte)0x00, // CLA
(byte)0xA4, // INS
(byte)0x04, // P1
(byte)0x00, // P2
(byte)0x00 // 数据长度
};
ResponseAPDU response = channel.transmit(new CommandAPDU(commandAPDU));
选择应用
使用SELECT命令选择卡上的应用:
byte[] selectApplet = {
(byte)0x00, (byte)0xA4, (byte)0x04, (byte)0x00,
(byte)0x08, // AID长度
(byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04,
(byte)0x05, (byte)0x06, (byte)0x07, (byte)0x08
};
读取数据
使用READ BINARY命令读取数据:

byte[] readCommand = {
(byte)0x00, (byte)0xB0, // READ BINARY
(byte)0x00, (byte)0x00, // 偏移地址
(byte)0x10 // 读取长度
};
写入数据
使用UPDATE BINARY命令写入数据:
byte[] writeData = { ... }; // 待写入数据
byte[] writeCommand = new byte[5 + writeData.length];
writeCommand[0] = (byte)0x00; // CLA
writeCommand[1] = (byte)0xD6; // UPDATE BINARY
writeCommand[2] = (byte)0x00; // P1
writeCommand[3] = (byte)0x00; // P2
writeCommand[4] = (byte)writeData.length; // 长度
System.arraycopy(writeData, 0, writeCommand, 5, writeData.length);
处理响应
检查APDU响应状态字(SW1/SW2):
byte[] responseData = response.getBytes();
int sw1 = responseData[responseData.length-2] & 0xFF;
int sw2 = responseData[responseData.length-1] & 0xFF;
if(sw1 == 0x90 && sw2 == 0x00) {
// 操作成功
}
安全注意事项
- 确保传输层加密(如T=1协议)
- 实现双向认证机制
- 限制重试次数防止暴力破解
- 敏感操作需要PIN验证
开发环境配置
- 安装Java Card Development Kit(JC DK)
- 使用Java Card IDE或支持Java Card的IDE插件
- 配置CAP文件生成工具
- 准备模拟器或物理卡进行测试
以上方法提供了Java卡读写的基本框架,实际实现需根据具体卡规范和应用需求调整。






