本文转载自: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)的格式如下,包含一个必须头部段和一个可选数据段:

  1. 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: 未知错误


参考博客:

 
分类: C#
标签: APDU

APDU报文【转】的更多相关文章

  1. PSAM卡之常用APDU指令错误码【转】

    本文转载自:http://blog.csdn.net/lvxiangan/article/details/53933714 PSAM卡的内容交互,是通过APDU指令完成的,常见的APDU报文格式如下: ...

  2. EMV/PBOC 解析(二) 卡片数据读取

    上一篇简单的了解了IC智能卡的文件结构和APDU报文,这篇我们直接来读取卡内的数据.下面我们主要参照<中国金融集成电路(IC)卡规范>. 好了废话不多说,下面贴指令: (1)卡片接收一个来 ...

  3. EMV/PBOC 解析(一) 卡片文件结构

    刚到公司老大便发我一份文档<智能卡ISO7816-4规范(中文版)>,然后就让我研究下IC智能卡数据读取和支付.身为一直做.NET开发的我对硬件啥的一无所知,各种无头绪啊,研究了两天后,稍 ...

  4. 7816的报文结构APDU

    命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...

  5. 7816的报文结构——APDU

    命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...

  6. APDU

    # APDU # 定义:APDU(ApplicationProtocolDataUnit--应用协议数据单元).协议数据单元PDU(ProtocolDataUnit)是指对等层次之间传递的数据单位.协 ...

  7. PBOC APDU命令解析【转】

    转自:http://blog.csdn.net/zuokong/article/details/49335257 版权声明:本文为博主原创文章,未经博主允许不得转载. 应用层发出的命令报文和卡片回送到 ...

  8. APDU命令与响应格式【转】

    本文转载自:http://map.im/apduintroduce 命令格式 APDU命令由命令头和命令体组成: CLA | INS | P1 | P2 | Lc | DATA | Le命令头: CL ...

  9. 7816协议时序和采用UART模拟7816时序与智能卡APDU指令协议

    7816时序 7816时一个比较早的老通讯时序了,最近项目上需要用UART模拟所以,简单学习时序. 时序比较简单,熟悉UART的一眼看着就像是串口的时序,只是他没有停止位,取而代之的就是保护时间gur ...

随机推荐

  1. 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)

    QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形. QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustom ...

  2. luogu 4884 多少个1?

    题目描述: 给定整数K和质数m,求最小的正整数N,使得 11111⋯1(N个1)≡K(mod m) 说人话:就是 111...1111 mod m =K 题解: 将两边一起*9+1,左边就是10^an ...

  3. SQL中带有NOT IN 子查询改写

    报表程序中的一段SQL运行很慢,代码如下: 优化前: 耗时:1337s INSERT INTO PER_LTE_ZIB_PB_COMMISSION_07 SELECT P.TOPACTUALID, Q ...

  4. Python之爬虫-酷6视频

    Python之爬虫-酷6视频 #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requests response = req ...

  5. 《深入浅出深度学习:原理剖析与python实践》第八章前馈神经网络(笔记)

    8.1 生物神经元(BN)结构 1.人脑中有100亿-1000亿个神经元,每个神经元大约会和其他1万个神经元相连 2.细胞体:神经元的主体,细胞体=细胞核+细胞质+细胞膜,存在膜电位 3.树突:从细胞 ...

  6. aggregate和annotate方法使用详解与示例

    aggregate和annotate方法的使用场景 Django的aggregate和annotate方法属于高级查询方法,主要用于组合查询.当我们需要对查询集(queryset)的某些字段进行计算或 ...

  7. noi.ac NOIP2018 全国热身赛 第二场 T3 color

    [题解] 我们可以发现每次修改之后叶子结点到根的路径最多分为两段:一段白色或者黑色,上面接另一段灰色的.二分+倍增找到分界点,然后更新答案即可. check的时候只需要判断当前节点对应的叶子结点的区间 ...

  8. PID28 [Stupid]愚蠢的宠物

    题链:https://www.rqnoj.cn/problem/28 题目描述 背景 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只 ...

  9. 使用idea搭建ssh项目

    参考: https://www.cnblogs.com/getchen/p/8036709.html 需要自己提前在数据库中建好表 然后连接数据库通过侧边栏的persistence来生成实体类和相应的 ...

  10. xtu Shortest Path

    Acceteped : 23   Submit : 61 Time Limit : 5000 MS   Memory Limit : 65536 KB Description 题目描述 N(3≤N≤1 ...