SIM卡APDU指令
来源:互联网 发布:如何开个淘宝店铺 编辑:程序博客网 时间:2024/05/19 01:14
一个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。
例:
//SELECTA0 A4 00 00 02 3F009F 17//SELECTA0 A4 00 00 02 7F109F 17//SELECTA0 A4 00 00 02 6F3A9F 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详细数据
例:
//SELECTA0 A4 00 00 02 7F109F 22//STAUTSA0 F2 00 00 2290 0000005DD07F1002000000000015B10114060085838583000083830000000000000000
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//SELECTA0 A4 00 00 02 3F009F 17//SELECTA0 A4 00 00 02 7F10 9F 17//SELECTA0 A4 00 00 02 6F3A9F0F//GET RESPONSEA0 C0 00 00 0F0000 0AF0 6F3A 04 00 11 FF 44 01 02 01 1C90000000 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指令
- SIM卡APDU指令
- SIM卡APDU指令
- SIM之APDU指令格式
- BlackBerry通过JSR177 API发APDU指令和SIM卡的applet进行沟通
- sim开机APDU命令流程
- sim开机APDU命令流程
- SIM逻辑模型与APDU
- APDU常用指令
- CPU卡常用的APDU指令错误码
- CPU卡常用的APDU指令错误码
- PSAM卡之常用APDU指令错误码
- CPU卡常用的APDU指令错误码
- SIM卡的PIN码(CHV)及对应的APDU命令
- 常用APDU指令错误码
- 常用APDU指令错误码
- 常用APDU指令错误码
- 常用apdu指令错误码
- 什么是Linux 软件源
- 2017/4/24 c++
- nginx 搭建rtmp流媒体服务器
- 当我们谈 SQL 优化时在谈些什么?
- Docker的使用--第一个Docker镜像(二)
- SIM卡APDU指令
- 网狐6603,android ndk编译时的错误:No rule to make target...
- 测试开发岗位面试总结
- 百度地图api,覆盖物的文本标注内容刷新。
- python字符串函数
- 第四十讲项目五 年龄几何
- hexo搭建blog并部署到github
- java 程序调windows、linux命令行
- JavaScript闭包的简单理解