本文转载自:http://blog.csdn.net/hlx156/article/details/54136756

一个APDU可以是一个命令,也可以是命令的响应。

命令APDU的一般格式: 
CLA INS P1 P2 P3 Data

响应APDU的一般格式: 
Data SW1 SW2

各个字节的意义如下: 
CLA: 是指令类型,GSM应用为0xA0。

INS:每个命令的指令编码,下面有定义。

P1,P2,P3:指令参数。0xFF是个无效值,P3给出了数据单元的长度。对于传送命令,当SIM 流出数据时,P3=0表示数据的长度为256,而SIM 流入数据时P3=0表 示没有数据。

SW1,SW2:命令结果是否成功的状态。

指令的5种情况

情况1:没有输入/没有输出 
CLA INS P1 P2 P3(lgth=0x00) 
SW1=0x90 SW2=0x00

情况2:没有输入/输出长度已知 
CLA INS P1 P2 P3(长度值lgth) 
DATA(长度为lgth) SW1=0x90 SW2=0x00

情况3:没有输入/输出长度未知 
CLA INS P1 P2 P3(lgth=0) 
SW1=0x9F SW2=lgth1 
GET RESPONSE 
CLA INS P1 P2 P3(lgth2) 
DATA(长度leth1<=leth2) SW1=0x90 SW2=0x00

情况4:有输入/没有输出 
CLA INS P1 P2 P3(lgth) 
DATA(长度为lgth) SW1=0x90 SW2=0

情况5:有输入/输出长度未知或已知 
CLA INS P1 P2 P3(lgth) 
DATA(长度为lgth) SW1=0x9F SW2=lgth1 
GET RESPONSE 
CLA INS P1 P2 P3(lgth2) 
DATA(长度lgth2<=lgth1) SW1=0x90 SW2=0x00

11.11中命令集如下: 

(1) SELECT 
选择一个文件的方法:

    ATR(复位)之后,MF将取消被选择,并且成为当前的目录。每个文件必须通过SELECT功能通过下面的规则来选择。
这时,你可以选择MF,也可以选择MF目录下的DF和MF目录下EF,若想要选择某一DF中的EF,必须先选择该DF成为当前目录,再选择DF中的EF。

例:

//SELECT
A0 A4 00 00 02 3F00
9F 17 //SELECT
A0 A4 00 00 02 7F10
9F 17 //SELECT
A0 A4 00 00 02 6F3A
9F 0F

CLA=A0:表示GSM应用 
INS=A4:表示SELECT 
P1P2=0000:表示参数 
P3=02:表示输入文件ID的长度 
3F00,7F10,6F3A表示选择的文件ID 
SW1=9F SW2=17(23)/0F(15)表示命令正确结束,其中SW2表示响应值长度

(2) STATUS

此功能返回与当前文件目录(根目录或应用目录)有关的信息,此操作不会改变当前EF内容;
这条命令可在任何时候使用,以获得与GSM应用有关的信息;
输入:无;
输出:文件标识符,总的可用存储空间,CHV激活/屏蔽,CHV状态和其他的GSM详细数据

例:

//SELECT
A0 A4 00 00 02 7F10
9F 22
//STAUTS
A0 F2 00 00 22
90 00
00005DD07F1002000000000015B10114060085838583000083830000000000000000

CLA=A0:表示GSM应用 
INS=F2:表示STATUS 
P1P2=0000:表示参数 
P3=22:表示返回响应值长度(从SELECT的返回值中获取) 
SW1=90 SW2=00 表示命令正确结束 
00005DD07F1002000000000015B10114060085838583000083830000000000000000表示返回的响应值(响应的参数/数据同使用SELECT命令选中MF和DF时的响应数据相同。)

(3) GET RESPONSE

此功能返回与当前文件目录(根目录或应用目录)有关的信息
这条命令可在任何时候使用,以获得与GSM应用有关的信息;
输入:无;
输出:文件标识符,总的可用存储空间,CHV激活/屏蔽,CHV状态和其他的GSM详细数据
STATUS与GET RESPONSE:区别在于STATUS命令不适用与EF,其中P3所需要的len为select响应的参数SW2 //SELECT
A0 A4 00 00 02 3F00
9F 17 //SELECT
A0 A4 00 00 02 7F10
9F 17 //SELECT
A0 A4 00 00 02 6F3A
9F0F //GET RESPONSE
A0 C0 00 00 0F
0000 0AF0 6F3A 04 00 11 FF 44 01 02 01 1C
9000 0000 0AF0 6F3A 04 00 11 FF 44 01 02 01 1C
//--00 00 保留
//--0A F0 占用的空间大小,表示7000字节
//--6F 3A 选中File的ID
//--04 文件类型,见11.11 9.3
//----'00':保留 '01':MF '02':DF '04':EF
//----此文件类型 EF
//--00 见11.11 9.2.1 detail 3
//----对于二进制和记录文件,该字节为保留字节。对于循环文件,除b6(0 based)外所有的bit都是保留的,b6=1表示当前所选择的循环文件可以执行INCREASE命令
//--11 FF 44 访问权限
//--01 文件状态,见11.11 9.3
//----+--+--+--+--+--+--+--+--+
//----|b7|b6|b5|b4|b3|b2|b1|b0|
//----+--+--+--+--+--+--+--+--+
//---- | | | | | | | +-b0=0文件无效, b0=1文件有效
//---- | | | | | | +----RFU
//---- | | | | | | b2=0: 当文件无效时不允许读和写
//---- | | | | | +-------b2=1: 当文件无效时允许读和写
//---- +--+--+--+--+----------RFU
//----本字节表示文件有效,当文件无效时不允许读/写
//--02 后面数据的长度,表示2
//----01 文件结构,见11.11 9.3
//------'00':二进制文件(透明文件) '01':记录文件(线性定长) '03':循环文件
//------此文件结构记录文件
//----1C 记录长度,见11.11 9.2.1 detail 4

(4)READ BINARY

此功能允许SIM卡从当前透明文件中读取字节串;
如果不满足EF文件READ指令的访问准予条件,SIM卡拒绝该功能;
输入:字节串的偏移地址和长度;
输出:字节串;

//SELECT 
A0 A4 00 00 02 2F05 
9F 0F

//GET RESPONSE 
A0 C0 00 00 0F 
0000 0008 2F05 04 00 01FF55 01 02 0000 
90 00

//READ BINARY 
A0 B0 00 00 08 
6573656E66727074 
90 00

//READ BINARY 
A0 B0 00 01 04 
73656E66 
90 00

CLA=A0:表示GSM应用 
INS=B0:表示READ BINARY 
P1P2=0000:表示高低位偏移 
P3=08:表示返回响应值长度(从SELECT的返回值中获取) 
(当P1P2=0001,P3=04时表示向右偏移1位,返回长度为4的响应值) 
SW1=90 SW2=00 表示命令正确结束

(5)UPDATE BINARY

此功能用于更新当前透明文件的字节串;
如果不满足EF文件UPDATE指令的访问准予条件,SIM卡拒绝该功能;
输入:字节串的偏移地址和长度;
输出:无;

//SELECT 
A0 A4 00 00 02 2F05 
9F 0F

//GET RESPONSE 
A0 C0 00 00 0F 
0000 0008 2F05 04 00 01FF55 01 02 0000 
90 00

//READ BINARY 
A0 B0 00 00 08 
6573656E66727074 
90 00

//UPDATE BINARY 
A0 D6 00 00 08 
0000000000000001 
90 00

//READ BINARY 
A0 B0 00 00 08 
0000000000000001 
90 00 
更新成功!

(6)READ RECORD 
此功能用于读取线性固定文件或循环文件的记录; 
如果不满足EF文件READ指令的访问准予条件,SIM卡拒绝该功能。若操作失败,记录指针不改变; 
读指令定义了4种模式: 
CURRENT模式(04):读当前的记录,记录指针不变; 
ABSOLUTE模式(04+记录号):读给定记录号的记录,记录指针不变; 
NEXT模式(02):功能执行前记录指针加一,然后读取指针指向的记录。 
PREVIOUS模式(03):功能执行前记录指针减一,然后读取指针指向的记录。 
输入:模式、记录号(ABSOLUTE模式)、记录长度; 
输出:记录;

//SELECT 
A0A4000002 3F00 
9F17

//SELECT 
A0A4000002 7F10 
9F17

//SELECT 
A0A4000002 6F3A 
9F0F

//GET RESPONSE 
A0C000000F 
00000AF06F3A040011FF440102011C 
9000

//READ RECORD 
A0B201041C 
80aabbccddFFFFFFFFFFFFFFFFFF07812143658709F1FFFFFFFFFFFF 
9000

(7)UPDATE RECORD

向线性定长记录的EF文件或循环记录EF文件中写入一条完整的记录;
如果不满足EF文件UPDATE指令的访问准予条件,SIM卡拒绝该功能。若操作失败,记录指针不改变;

//SELECT 
A0A4000002 3F00 
9F17

//SELECT 
A0A4000002 7F10 
9F17

//SELECT 
A0A4000002 6F3A 
9F0F

//GET RESPONSE 
A0C000000F 
00000AF06F3A040011FF440102011E 
9000

//UPDATE RECORD 
A0DC01041E

输入数据: 
111110000000000000000000000000000000000000000000000000000000

90 00

SIM卡APDU指令【转】的更多相关文章

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

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

  2. simtrace之探秘SIM卡中的世界

    0×00 关于SIM卡 众所周知SIM卡是一张插在手机上的小卡,其全称为Subscriber Identity Module 客户识别模块.不过,这个世界上并没有多少人知道SIM卡中的操作系统是基于j ...

  3. android131 360 05 手势触摸滑动,sim卡,开机启动的广播,手机联系人,SharedPreferences,拦截短信

    安卓手势触摸滑动: package com.itheima52.mobilesafe.activity; import android.app.Activity; import android.con ...

  4. SIM卡基础知识

    一:了解Sim卡和GSM网络登录步骤的基本知识 (一)名词解释: SIM卡(Subscriber Identity Module),即用户识别卡,它是一张符合GSM规范的“智慧卡”,SIM卡有大小之分 ...

  5. SIM卡读卡器的研究与设计

    SIM卡(Subscriber Identity Module).即用户识别模块,是一张符合GSM规范的"智慧卡".SIM卡可以插入任何一部符合GSM规范的移动电话中," ...

  6. 手机SIM卡知识大科普

    SIM卡 SIM卡是(Subscriber Identity Module 客户识别模块)的缩写,也称为智能卡.用户身份识别卡,GSM数字移动电话机必须装上此卡方能使用.它在一电脑芯片上存储了数字移动 ...

  7. SIM卡是什么意思?你所不知道的SIM卡知识扫盲(详解)【转】

    原文链接:http://www.jb51.net/shouji/359262.html 日常我们使用手机,SIM卡是手机的必须,没有了它就不能接入网络运营商进行通信服务.SIM卡作为网络运营商对于我们 ...

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

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

  9. Android 手机卫士--绑定sim卡序列号

    现在开始具体 处理每一个导航页面的逻辑,首先看第二个导航页 本文地址:http://www.cnblogs.com/wuyudong/p/5949775.html,转载请注明出处. 这里需要实现绑定s ...

随机推荐

  1. 浅谈FFT(快速博立叶变换)&学习笔记

    0XFF---FFT是啥? FFT是一种DFT的高效算法,称为快速傅立叶变换(fast Fourier transform),它根据离散傅氏变换的奇.偶.虚.实等 特性,对离散傅立叶变换的算法进行改进 ...

  2. Ztree节点前加上两个自定义按钮

    前言: 在我的权限管理模块遇到了给某些角色加权限的问题,这时就需要实现将每个模块做成树,在每个节点前加上预览和编辑的按钮,这样可以根据数据库的某个字段给每个角色赋权限. 必须必须吐槽的是,这部分的功能 ...

  3. Python:socket实现ftp程序

    刚开始学习socket编程,还不是特熟练,码了好长时间,中间遇到许多问题,记录一下用socketserver写ftp server端: #!/usr/bin/env python import soc ...

  4. java使用ant.jar解压缩文件

    ant.jar下载地址http://ant.apache.org/bindownload.cgi 压缩文件代码: import org.apache.tools.ant.Project; import ...

  5. noi.ac NOIP2018 全国热身赛 第二场 T1 ball

    [题解] 可以发现每次推的操作就是把序列中每个数变为下一个数,再打一个减一标记:而每次加球的操作就是把球的位置加上标记,再插入到合适的位置. 用set维护即可. #include<cstdio& ...

  6. A - 栈

    Description   You are given a string consisting of parentheses () and []. A string of this type is s ...

  7. Django开发:(3.2)ORM:多表操作

    表关系总结: 一对多:在多的表中建立关联字段 多对多:创建第三张表(关联表):id 和 两个关联字段 一对一:在两张表中的任意一张表中建立关联字段(关联字段一定要加 unique 约束) 子查询:一次 ...

  8. 3.2 符号表之二叉查找树BST

    一.插入和查找 1.二叉查找树(Binary Search Tree)是一棵二叉树,并且每个结点都含有一个Comparable的键,保证每个结点的键都大于其左子树中任意结点的键而小于其右子树的任意结点 ...

  9. node使用npm一句命令停止某个端口号 xl_close_port

    一命令停止某一个端口号,再也不怕端口号被占用了.. 1.插件背景 开启项目的时候,跑不起来了? 很多时候的原因就是,依赖版本,依赖的包未安装,再就是端口号被占用 例如: 这时候,我们做法就是: 1.到 ...

  10. jmeter的Classpath即类或者jar包的搜索路径设置

    对于master-slave模式,插件和依赖都需要放到slave上才能生效,并且需要重启slave使插件生效 查看配置文件:apache-jmeter-3.1/bin/jmeter.propertie ...