本文转载自:http://blog.csdn.net/yonghenzhita/article/details/36402525

版权声明:本文为博主原创文章,未经博主允许不得转载。

简单说,IFD(接口设备)与IC卡之间的通讯是这样的:

a、首先,IFD(接口设备)发送5个字节的命令头给IC卡,这5个字节的内容告诉了IC卡要做什么操作;

b、然后,IC卡回传一个过程字节给IFD,告诉IFD(接口设备)IC卡是否支持该操作;

c、如果返回的过程字节告诉IFD——IC卡支持该操作,则接下来就进行数据的传输(如果有的话),数据从IFD输入到IC卡或数据从IC卡输出到IFD;

d、如果返回的过程字节告诉IFD——IC卡不支持该操作,则IC卡回传给IFD两个状态字节SW1 SW2,IFD根据SW1 SW2两字节判断IC卡不支持该操作的原因;

下面介绍ISO/IEC 7816-4 中规定的标准操作流程(以下内容由本人翻译原英文版ISO/IEC 7816-4而来,如有错漏之处请不吝指教):

 

10.3  命令的结构和处理

10.3.1  概述

首先,每一条命令均由IFD(接口设备)发起,它通过5字节的命令头告诉卡设备做什么。

然后,在卡发送的过程字节的控制下,该命令继续在某一个方向上传输一串数据字节。

为了区分用于输入数据的命令(其中处理过程中,数据字节进入卡)和用于输出数据的命令(其中处理数据字节时该数据离开卡),假设卡和接口设备预先知道数据运送方向。

10.3.2 命令头

命令头由5个字节组成,分别为CLA,INS,P1,P2和P3。其中CLA,INS,P1和P2这些参数的值由ISO/IEC7816-4部分定义。

—— CLA        表示指令类别(class)。其中值‘FF’被保留用于PPS(见6.3.1和9.2)。

注意        ISO/IEC 7816-4 强制‘FF’对于CLA为无效值。

—— INS         表示指令代码(instruction)。其中值‘6X’和‘9X’为无效值。

注意        ISO/IEC 7816-4 强制‘6X’和‘9X’对于INS为无效值。

—— P1 P2     表示命令参数。对于不同的指令(INS)P1 P2有不同的含义。

—— P3           表示数据字节的长度。对命令期间待传送的字节D1~Dn的数目n进行编码。

l   在输出数据的传送命令中,P3=0表示从卡传输256字节。

l   在输入数据的传送命令中,P3=0表示不从卡传输数据。

10.3.3  过程字节

IFD(接口设备)发送完5字节的命令头后,应该等待卡设备传入一个过程字节。有三种类型的过程字节,见表11。

过程字节不同的值表示不同含义:

——如果值为‘60’,表示为一个NULL字节。它要求不进行数据字节的传送。IFD应该等待卡设备传入下一个过程字节。

——如果值为‘6X(≠60)’或‘9X’,表示为SW1字节。字要求不进行数据字节的传送。IFD(接口设备)应等待卡设备传入一个SW2字节。这里对SW2的值无限制。

注意      ISO/IEC7816-4 强制‘60’为无效的SW1值,以及其它任不同于‘9X’和‘6X’的值。

——如果值与INS相等,除‘6X’和‘9X’以外,它是一个ACK字节。则表示运送所有剩余字节(如果存在)Di~Dn。然后IFD(接口设备)应等待卡设备传入一个过程字节。

——如果值与INS⊕FF(异或)相等,除‘6X’和‘9X’以外,它是一个ACK字节。则表示运送下一个数据字节(如果存在)Di。然后IFD(接口设备)应等待卡设备传入一个过程字节。

——如果为其它值,则属无效。

表11 ——过程字节

字节

数据的传送操作

然后接收

NULL

‘60’

无动作

一个过程字节

ACK

INS

所有剩余数据字节

一个过程字节

INS⊕FF(异或)

下一个数据字节

一个过程字节

SW1

‘6X(≠60)’或‘9X’

无动作

SW2字节

当过程字节为NULL和ACK时,卡设备能继续处理命令;或者当过程字节为SW1 SW2时,卡设备结束命令的处理;或者不响应表示不赞成。

10.3.4  状态字节

状态字节SW1 SW2表示命令结束时卡设备的状态。它们的值由ISO/IEC 7816-4 指定。

注   ISO/IEC7816-4 强制6个状态字节值的定义。

‘9000’    命令正常结束;

‘6E00’     CLA不支持;

‘6D00’     CLA支持,但INS不支持;

‘6B00’     CLA  INS 均支持,但是P1 P2错误;

‘6700’     CLA  INS  P1  P2均支持,但是P3错误;

‘6F00’     命令不支持,但是没有找出精确的诊断;

根据定义,在传入的SW2字节的前沿12etu后,命令结束。

注:本节内容翻译自 ISO/IEC 7816-4:2006 第10.3节。

APDU命令的结构和处理【转】的更多相关文章

  1. PBOC APDU命令解析【转】

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

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

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

  3. 转:APDU命令格式

    CLA    INS  P1  P2  Lc  Data  Le 其中CLA为指令类别:INS为指令码:P1.P2为参数:Lc为Data的长度:Le为希望响应时回答的数据字节数,0表最大可能长度. 一 ...

  4. redis常用命令及结构

    ##常用结构及命令: keys * #查询所有key randomkey #随机返回key type key #返回key的类型 exists key #判断key是否存在 del key1 key2 ...

  5. ADPU 大全

    APDU协议 APDU协议,即是智能卡与读写器间的应用层协议,在ISO7816-4[7]中定义了该协议的结构格式.APDU数据有两种结构,读写器使用的APDU结构为命令APDU,C-APDU(Comm ...

  6. SQL Server里查询表结构命令

    现提供两条命令查询表结构: 1.sp_help table_name;           如: [sql] sp_help Student;     2.sp_columns table_name; ...

  7. 精通awk系列(6):awk命令结构和awk语法结构

    回到: Linux系列文章 Shell系列文章 Awk系列文章 awk命令行结构和语法结构 awk命令行结构 awk [ -- ] program-text file ... (1) awk -f p ...

  8. APDU

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

  9. 智能卡 APTU命令

    一条命令APDU含有一个头标和一个本体.本体可有不同长度,或者在相关数据字段为空时,整个可以不存 在. 头标由四个数据元组成,它们是类CLA(ClAss)字节,命令INS(INStructic,n)字 ...

随机推荐

  1. [模板] Treap

    插入x 删除x 查询排名为x的数 查询x的排名 求x的前驱.后继 //Stay foolish,stay hungry,stay young,stay simple #include<iostr ...

  2. Python列表、元组、字典、集合的内置使用方法

    列表: 是一种可以存储多个值得数据容器 内容是有序的 可以存储任何数据类型 可以存储重复的元素 是可变类型(当内容发生变化时id不变) 元组: 也是一种可以存储多个值得数据容器 元组中的元素不可以被修 ...

  3. php 实现301重定向跳转实例代码

    本文主要介绍php 实现301重定向跳转,通过实例代码让大家更好的理解重定向的方法,有需要的小伙伴可以参考下 在php中301重定向实现方法很简单我们只要简单的利用header发送301状态代码,然后 ...

  4. kvm:日常使用

    常用命令 创建新镜像:qemu-img create -f qcow2 /var/lib/libvirt/images/$1.img 100G 创建新镜像:qemu-img create -f qco ...

  5. 一个页面从输入URL到加载显示完成,发生了什么?

    面试经典题--URL加载 一.涉及基本知识点: 1. 计算机网络 五层因特尔协议栈: 应用层(dns.http):DNS解析成IP并完成http请求发送: 传输层(tcp.udp):三次握手四次挥手模 ...

  6. Python之面向对象反射

    Python之面向对象反射 isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj = Foo() 5 6 ...

  7. Tomcat处理HTTP请求原理

    一.Tomcat是什么? Tomcat是一个Web应用服务器,同时也是一个Servlet/JSP容器.Tomcat作为Servlet容器,负责处理客户端请求,把请求传送给Servlet,并将Servl ...

  8. 九度oj 题目1205:N阶楼梯上楼问题

    题目1205:N阶楼梯上楼问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:4990 解决:2039 题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用 ...

  9. HDU-1163Eddy's digital Roots,九余定理的另一种写法!

    下午做了NYOJ-424Eddy's digital Roots后才正式接触了九余定理,不过这题可不是用的九余定理做的.网上的博客千篇一律,所以本篇就不发篇幅过多介绍九余定理了: 但还是要知道什么是九 ...

  10. SQL Server-索引管理

    http://www.2cto.com/database/201305/207508.html SQL Server-索引管理   一.显示索引信息 在建立索引后,可以对表索引信息进行查询. (1)在 ...