APDU报文【转】
本文转载自:http://www.cnbolgs.com/snail0404/p/5436348.html
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报文【转】的更多相关文章
- PSAM卡之常用APDU指令错误码【转】
本文转载自:http://blog.csdn.net/lvxiangan/article/details/53933714 PSAM卡的内容交互,是通过APDU指令完成的,常见的APDU报文格式如下: ...
- EMV/PBOC 解析(二) 卡片数据读取
上一篇简单的了解了IC智能卡的文件结构和APDU报文,这篇我们直接来读取卡内的数据.下面我们主要参照<中国金融集成电路(IC)卡规范>. 好了废话不多说,下面贴指令: (1)卡片接收一个来 ...
- EMV/PBOC 解析(一) 卡片文件结构
刚到公司老大便发我一份文档<智能卡ISO7816-4规范(中文版)>,然后就让我研究下IC智能卡数据读取和支付.身为一直做.NET开发的我对硬件啥的一无所知,各种无头绪啊,研究了两天后,稍 ...
- 7816的报文结构APDU
命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...
- 7816的报文结构——APDU
命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...
- APDU
# APDU # 定义:APDU(ApplicationProtocolDataUnit--应用协议数据单元).协议数据单元PDU(ProtocolDataUnit)是指对等层次之间传递的数据单位.协 ...
- PBOC APDU命令解析【转】
转自:http://blog.csdn.net/zuokong/article/details/49335257 版权声明:本文为博主原创文章,未经博主允许不得转载. 应用层发出的命令报文和卡片回送到 ...
- APDU命令与响应格式【转】
本文转载自:http://map.im/apduintroduce 命令格式 APDU命令由命令头和命令体组成: CLA | INS | P1 | P2 | Lc | DATA | Le命令头: CL ...
- 7816协议时序和采用UART模拟7816时序与智能卡APDU指令协议
7816时序 7816时一个比较早的老通讯时序了,最近项目上需要用UART模拟所以,简单学习时序. 时序比较简单,熟悉UART的一眼看着就像是串口的时序,只是他没有停止位,取而代之的就是保护时间gur ...
随机推荐
- router-link的使用方法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Hihocoder #1938 最大权闭合子图模板
这里的讲解很不错,适合作为入坑题: Hihocoder#1938 代码: #include<algorithm> #include<iostream> #include< ...
- django-1创建项目创建app设置setting、urls、templates、views等
1. python -m django --version 查看版本 1.11.4 在需要创建项目的目录下执行: 2. django-admin startproject myblog => 创 ...
- C51 动态数码管 个人笔记
8段led管构成一个数字. 开发板上共有8个数字. 每个数字有一个使能端(段选引脚) 每个数字的位选端(选择8段led管哪些亮,即构成什么图案)并联在一起 轮流点亮不同数字,速度很快,视觉暂留,从而形 ...
- sql判断以逗号分隔的字符串中是否包含某个字符串--------MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法
sql判断以逗号分隔的字符串中是否包含某个字符串---------------https://blog.csdn.net/wttykj/article/details/78520933 MYSQL中利 ...
- Mongo的Replica Sets (复制集)的配置全过程和心得体会
http://blog.csdn.net/bloggongchang/article/details/7272403 一.MongoDB Replica Sets(副本集)简单的说就是有自动故障恢复功 ...
- Spring & Java
Spring & Java https://spring.io/ Spring Boot https://www.shiyanlou.com/courses/1152 Spring Boot入 ...
- POJ 2479 两段连续最大和
题目大意: 在一组数中,找到连续的两段 , 是这两段相加和达到最大 这里利用dp[2][N]的数组保存所有的状态 dp[0][i]表示取到第i个数时只取了一段的最大和,第i个数是一定要被取到的 dp[ ...
- 前端开发:JavaScript---DOM & BOM
DOM:Document Object Model 文档对象类型 模态框案例 <!DOCTYPE html> <html lang="en"> <h ...
- 洛谷 通天系列 P1760 P1757 P1759
P1760 通天之汉诺塔 汉诺塔问题.一个高精乘单精解决 ans=2^n-1 /*by SilverN*/ #include<algorithm> #include<iostream ...