APDU
# APDU #
定义:APDU(ApplicationProtocolDataUnit--应用协议数据单元)。协议数据单元PDU(ProtocolDataUnit)是指对等层次之间传递的数据单位。协议数据单元(ProtocolDataUnit)物理层的PDU是数据位(bit),数据链路层的PDU是数据帧(frame),网络层的PDU是数据包(packet),传输层的PDU是数据段(segment),其他更高层次的PDU是数据(data)。
APDU命令与响应格式
命令格式
- APDU命令由命令头和命令体组成: CLA | INS | P1 | P2 | Lc | DATA | Le
- 命令头: CLA | INS | P1 | P2
命令体: Lc | DATA | Le
命令各字段含义
- CLA:命令报文的类别字节
- P1: 参数 1
- P2:参数 2
- Lc:Data的长度(含4字节mac)
- Data:在命令的数据字段中发送的字节串
Le:在向命令响应的数据字段中期望的字节最大数
命令可分为四种情况:
- Case1 | CLA INS P1 P2
- Case2 | CLA INS P1 P2 Le
- Case3 | CLA INS P1 P2 Lc Data
Case4 | CLA INS P1 P2 Lc Data Le
Case1
- 这种情况时,命令中没有数据送到卡( Lc)中,也没有数据从卡中返回( Le)。
- 不含安全报文的命令: CLA | INS | P1 | P2
- 含安全报文的命令: CLA | INS | P1 | P2 | Lc | MAC
注: Lc = MAC 的长度, 4 字节。
Case2
- 这种情况时,命令中没有数据送到卡( Lc)中,有数据从卡中返回( Le)。
- 不含安全报文的命令: CLA | INS | P1 | P2 | Le
- 含安全报文的命令: CLA | INS | P1 | P2 | Lc | MAC | Le
注: Lc = MAC 的长度, 4 字节。
Case3
- 这种情况时,命令中有数据送到卡( Lc)中,没有数据从卡中返回( Le)。
- 不含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data
- 含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data+MAC
注: Lc = 数据的长度 + MAC 的长度( 4 字节)。
Case4
- 这种情况时,命令中既有数据送到卡( Lc)中,也有数据从卡中返回( Le)。
- 不含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data | Le
- 含安全报文的命令: CLA | INS | P1 | P2 | Lc | Data+MAC | Le
注: Lc = 数据的长度 + MAC 的长度( 4 字节)。
响应格式
格式1
| Data | SW1 SW2 |
格式2
- | SW1 SW2 |
响应各字段含义
- Data:在响应的数据字段中收到的字节串
- SW1:状态字 1
- SW2:状态字 2
APDU格式详解
APDU定义了主机和卡之间交互的数据格式,绝大部分卡片遵循此数据格式,当然为了保密或其它原因是可以自定义新的数据格式。APDU分为发送命令(C-APDU)和返回命令(R-APDU)。
一、C-APDU元素说明:
发送命令(C-APDU)的格式如下,包含一个必须头部段和一个可选数据段:
- CLA(1字节):用于命令类别的标示,传输安全控制,传输信道说明等。
比特值 说明 0XXXXXXX 为ISO规定的指令类别,0x00,0x04(线路保护)等 1XXXXXXX 为私有自定义指令类别,0x80,0x84(线路保护)等 2.INS(1字节):用于指明CLA字段中标示的指令类中的一个特定指令。
3.P1(1字节):指令参数1,如没有填0x00。
4.P2(1字节):指令参数2,如没有填0x00。
5.LC(1字节):这个可选的字段是命令的数据字段的字节数。
6.LE(1字节):这个可选的字段指定在期望响应的数据字段中的极限字节数。
7.四种C-APDU结构如下:
二、R-APDU元素说明:
返回命令(R-APDU)的格式如下,包含一个可选数据段和一个必须状态值:
数据字段(可变长度,由APDU命令中的LE确定):这个可选择的字段包含卡片返回的数据。
SW1(1字节):这个必要的字段是状态字1。
SW2(1字节):这个必要的字段是状态字2。
SW1-SW2成功一般为9000,其他值为某种状态、警告或者错误!
常用SW1-SW2值:
9000: 执行成功
6100: 数据被截断
6283: 应用无效
6300: 认证失败
6400: 原因不明
6700: 长度不对
6982: 需要PIN验证
6983: 文件无效
6984: 数据无效
6985: 条件不满足
6986: 不允许该命令
6982: 安全条件不满足
6987: 安全消息丢失
6988: 安全消息不正确
6999: 应用选择失败
6A80: 数据错误
6A81: 功能不支持
6A82: 文件找不到
6A83: 记录找不到
6A84: 没有足够的空间
6A86: 不正确的参数(P1,P2)
6A88: 引用数据没找到
6B00: 错误的参数 (P1,P2)
6C00: 长度错误 (Le)
6D00: INS不支持
6E00: CLA 不支持
6F00: 未知错误
参考博客:
APDU的更多相关文章
- 如何把apdu[decode_len]打印出来
memcpy(data, &apdu[decode_len], apdu_len - decode_len); int i = 0; for(i=0;i<apdu_len;i ...
- PBOC APDU命令解析【转】
转自:http://blog.csdn.net/zuokong/article/details/49335257 版权声明:本文为博主原创文章,未经博主允许不得转载. 应用层发出的命令报文和卡片回送到 ...
- 7816的报文结构APDU
命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...
- 7816的报文结构——APDU
命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...
- ISO 7816-4: Annex A: Transportation of APDU messages by T=0
http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_annex-a.aspx Annex A: Transportation ...
- Extended APDU support
http://pcsclite.alioth.debian.org/ccid_extended_apdu.html To be able to use an extended APDU you nee ...
- Complete list of APDU responses
https://www.eftlab.com.au/index.php/site-map/knowledge-base/118-apdu-response-list List of APDU resp ...
- APDU命令与响应格式【转】
本文转载自:http://map.im/apduintroduce 命令格式 APDU命令由命令头和命令体组成: CLA | INS | P1 | P2 | Lc | DATA | Le命令头: CL ...
- SIM卡APDU指令【转】
本文转载自:http://blog.csdn.net/hlx156/article/details/54136756 一个APDU可以是一个命令,也可以是命令的响应. 命令APDU的一般格式: CLA ...
随机推荐
- Eclipse Plug-in Hello world
这一篇就简单说下一个hello world插件工程创建过程. 1.创建一个Plug-in Project 2.填写project name 3.第二个确认框勾上,然后直接下一步 ...
- jquery取消事件冒泡的三种方法(推荐)
1.通过返回false来取消默认的行为并阻止事件起泡. jQuery 代码: ? 1 2 3 4 5 6 7 8 9 10 11 $("form").bind( "s ...
- Atitit.git的存储结构and 追踪
Atitit.git的存储结构and 追踪 1. Add index.js 2 index1 1.1. new1 1.2. Modify1 2. Commit1 1. Add index.js 2 i ...
- Android 进程生命周期 Process Lifecycle
Android 进程生命周期 Process Lifecycle 进程的生命周期 Android系统会尽力保持应用的进程,但是有时为了给新的进程和更重要的进程回收一些内存空间,它会移除一些旧的进程. ...
- RxJava 和 RxAndroid 三(生命周期控制和内存优化)
rxjava rxandroid 赵彦军 前言:对Rxjava.Rxandroid不了解的同学可以先看看 RxJava 和 RxAndroid RxJava 和 RxAndroid 二(操作符的使用) ...
- self&super
http://chun.tips self是类的隐藏参数,指向当前调用方法的这个类的实例.super是一个编译器标识符,和self指向同一个消息接受者.所以不管调用[self class]还是[sup ...
- [读书笔记] Head First 设计模式
OO基础 抽象 封装 多态 继承 OO原则 原则 描述 封装变化 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混合在一起. 把会变化的部分取出来并“封装”起来,好让其他部分不 ...
- iOS-公司开发者账号的申请和注册(博主原创+亲身经历+2016年申请+附带与邓白氏公司的往来邮件截图)
不吹不黑,此篇博客真乃我的良心之作啊,希望对大家有所帮助! 链接在简书:http://www.jianshu.com/p/9de6a8eb4d88
- css字体家族
名词解释: 衬线指的是字体起始末端的细节装饰.
- Photo Shop 设置
1. 编辑 > 首选项 > 单位与标尺 2. 面板 在『窗口』 菜单下开启: 工具 选项 信息(F8) 图层(F7) 历史记录 可以将设置好的面板保存下来,这样下次别人弄乱了你的面板后,你 ...



