JavaCard——APDU的结构分析

APDU的全称为Application Protocol Data Unit,应用协议数据单元,用于IC智能卡的通讯协议。


命令APDU如上图所示,包含头和主体两个部分。头部包括CLA、INS、P1、P2。CLA和INS说明了应用的分类和指令,P1、P2作为指令的具体描述。APDU的主体长度是可变的,它可以作为命令的一部分从读卡器传送数据到卡片内,Lc说明了作为数据传送到卡片上的数据的长度,Data Field是作为数据域。Le是期望卡片返回的指令的长度。

APDU的可以有以下结构:

1. CLA-INS-P1-P2 没有数据要发送至卡片,没有数据从卡片上返回。

2. CLA-INS-P1-P2-Le 没有数据要发送至卡片,有数据从卡片上返回。

3. CLA-INS-P1-P2-Lc-Data Field 有数据要发送至卡片,没有数据从卡片上返回。

4. CLA-INS-P1-P2-Lc-Data Field-Le 有数据要发送至卡片,有数据从卡片上返回。


响应APDU如上图所示,包含主体和尾部两个部分。主体为Data Field,主体可以为空,也可以包含数据域,数据域的长度由命令APDU的Le决定。尾部包括两个部分SW1、SW2,此为返回状态吗,一个字节用来说明错误类型,另一个字节 用来说明具体的命令状态或错误标识。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
APDUAnalysiser程序的设计最终目标是实现对高通QCAT Log分析工具的增强,对UIM Debug信息实现完整解析。使用此工具可以使开发人员更轻松、简单地从内容繁杂的Log文件中找到、提取出感兴趣的信息内容,达到快速分析、定位、解决故障的目的。 本文档分为三个部分,分别介绍APDUAnalysiser的工作原理、功能说明和安装要点。 1.工作原理 简要说明一下对Log文件导入的支持原理。 APDUAnalysiser支持两种类型Log文件的导入: 通过QXDM抓取的Log文件(*.isf)和由isf文件转化而成的文本文件(*.txt)。 程序仅实现了对文本文件的内容读取和解析,isf文件由于其格式高通未公布,其文件结构属于黑盒状态,暂时无法直接解析。 当前对isf文件的导入方案为:通过QCAT先转化为文本再导入。 当用户选取某个isf文件后,程序自动到QCAT安装目录调用qcat程序进行Log文件的文本转换,将转换结果保存到同路径同名称的文本文件中,然后将该文本通过APDUAnalysiser导入。 2.功能说明 APDUAnalysiser工具提供以下类型log的解析功能,非以下类型的信息将被工具自动过滤掉。 1).普通调试信息 APDUAnalysiser支持对普通调试信息的彩色显示,对调试信息按文件名称进行定制化过滤。 高通工具仅支持对普通调试信息按等级和功能模块过滤,这样往往容易在Log中产生大量的垃圾信息,使有用的信息不容易被发现。 APDUAnalysiser实现的对文件名称定制过滤功能有效地解决了这一问题,工具还支持定制指定的文件名和关键字集合,可以更加灵活方便地实现信息的过滤。 2).UIM Debug信息 高通工具不支持对这种类型Log的解析,开发人员只能通过经验或查阅相关规范文档来理解Log中的意思。不仅费时费力,而且不全面,容易出错。 APDUAnalysiser目标是对这类信息实现完全的自动化解析,这部分工作量非常大,目前对常用的一些信息已经有很好的解析,可以对当前的开发工作进行支持,包括如下类型的指令: a.UTK主动式命令Tag解析(支持UTK发短信的TPDU解析); b.卡文件交互命令解析; c.卡上电话本记录初始化解析; d.短信读取及TPDU解析(与QCAT工具显示方式相同,支持中文解析); e.鉴权操作Tag解析; 3).OTA信息 列表显示及按类型过滤显示。这部分Log的显示高通工具做得本身比较好,这里的功能与高通工具类似。 工具支持对字体大小和颜色的定制显示,支持对显示列表内容的快速搜索功能。在实际使用中应该能起到一定的作用。 3.安装要点 Step1:确认电脑中已经安装jre5或以上的java运行环境 Step2:在系统环境变量中添加 项:_JAVA_OPTIONS, 值:-Xms24m -Xmn1m -Xmx256m Step3.将工具包解压后,双击dist\APDUAnalysiser.jar开始使用工具 ¤请确定已安装高通工具QCAT
Java Card是为了智能卡和嵌入式设备开发的一种Java平台。它支持Java SE的子集,因此可以使用Java Swing组件来构建用户界面。如果您想在Java Card应用程序中组合两个Java Swing组件,可以按照以下步骤操作: 1. 在Java Card应用程序中创建一个Java Swing JFrame窗口。 2. 在JFrame窗口中添加两个Java Swing组件,例如JTextField和JButton。您可以使用setLayout()方法定义组件的布局。 3. 定义一个Java Card应用程序中的APDU命令,以便在智能卡上触发应用程序。例如,您可以定义一个命令来启动JFrame窗口。 4. 在Java Card应用程序中实现处理APDU命令的代码。当智能卡接收到定义的命令时,它将执行相应的代码,显示JFrame窗口和两个Java Swing组件。 例如,以下是一个简单的Java Card应用程序代码示例,它创建一个JFrame窗口,添加一个JTextField和一个JButton组件,并在智能卡上启动JFrame窗口: ```java import javacard.framework.*; import javax.swing.*; import java.awt.*; public class MyCardApplet extends Applet { private JFrame frame; private JTextField textField; private JButton button; public MyCardApplet() { initUI(); } public static void install(byte[] bArray, short bOffset, byte bLength) { new MyCardApplet().register(); } public void process(APDU apdu) { // Handle APDU commands here } private void initUI() { frame = new JFrame("My Card App"); frame.setLayout(new FlowLayout()); textField = new JTextField(20); button = new JButton("Click Me"); frame.add(textField); frame.add(button); frame.pack(); } public void start() { frame.setVisible(true); } } ``` 这只是一个简单的示例,您可以根据您的需求进行修改和扩展。请注意,Java Card应用程序的可用内存和处理能力可能有限,因此您需要谨慎考虑您的应用程序设计和实现。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值