5-SIM数据交互之-C0(GET RESPONSE)

C0-GET RESPONSE

C0即获取fcp(File Control Parameters 文件控制参数)里面的值,该指令一般在A4之后执行,执行A4选择文件夹时,SIM卡会返回该文件下fcp的长度,如:61 29,该值即为C0需要读的字节长度

C0指令比较固定,00 C0 00 00 XX(XX代表要读取的长度)

1.正常读取

SIM卡返回的数据以C0开始,以9000结束,长度为传入的XX(fcp文件的内容长度)。

=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29                 //返回长度0x29
=>00 C0 00 00 29        //读取0x29的fcp数据
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A 9000      //90 00正常结束

2.读取少于/00原有数据

当读C0时,如果A4选择时,返回61 29,但是没有读取完全,如0x00 0xc0 0x00 0x00 0x20,则只会返回0x16个字节回来,并且返回剩余的字节数61开始(要读取00字节时,则以6C开始)这时你需要再次读取。

=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29                 //返回长度0x29
=>00 C0 00 00 20        //只读取0x20的fcp数据
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C900160 6109   //返回结束符为61 09,告诉你还有0x09个字节需要读取
=>00 C0 00 00 20        //这时候必须去读取0x09个字节,不然还是会报错
<=61 09                 //返回剩余字节数,61开始
=>00 C0 00 00 00        //这时候必须去读取0x09个字节,不然还是会报错
<=6C 09                 //返回剩余字节数,6C开始
=>00 C0 00 00 09
<=83010183018183010A 9000  //当用0x09读取时,则返回剩余的fcp数据,并90 00结束

3.读取多于原有数据

当读C0时,如果A4选择时,返回61 29,但是却想读取更多的内容,如0x00 0xc0 0x00 0x00 0x30,则会返回该文件的剩余大小6C开始,需要以实际大小来读取

=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29                 //返回长度0x29
=>00 C0 00 00 30        //读取0x30的fcp数据,超过0x29
<=6C 29                 //返回剩余字节数
=>00 C0 00 00 29        //读取0x29的fcp数据
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A 9000      //90 00正常结束

4.已经读取完C0,却要再读C0

当C0的数据已经被读取完成,此时再发C0指令进行内容的读取,则会返回6F00。如果想再次读取数据,只能用A4再选择一次该文件才可以。

=>00 A4 00 04 02
<=A4
=>3F 00
<=61 29                 //返回长度0x29
=>00 C0 00 00 30        //读取0x30的fcp数据,超过0x29
<=6C 29                 //返回剩余字节数
=>00 C0 00 00 29        //读取0x29的fcp数据
<=C0 62278202782183023F00A507800171C00200018A01058B032F0602C60C90016083010183018183010A 9000     //90 00正常结束
=>00 C0 00 00 29        //再次读取0x29的fcp数据
<=6F 00                 //6F 00数据已经读取完成

5.未读取完C0,却要读B0/B2

无论上面的读少或读多C0的数据,只要没有正常结束则无法再执行文件对于的属性内容,

=>00 A4 00 04 02
<=A4
=>2F E2
<=61 19                 //返回长度0x19
=>00 C0 00 00 19        //读取0x19的fcp数据
<=C0 62178202412183022FE28A01058B032F06018002000A880110 9000
=>00 B0 00 00 0A
<=B0 9868200B326101550494 9000      //90 00正常结束
=>00 A4 00 04 02
<=A4
=>2F E2
<=61 19                 //返回长度0x19
=>00 C0 00 00 11        //读取0x19的fcp数据
<=C0 62178202412183022FE28A01058B032F06 6108
=>00 B0 00 00 0A
<=B0 9868200B326101550494 9000      //90 00正常结束

其实是可以正常读取B0/B2的,这时你是不是就觉得可以不用正确读取C0了,反正读到B0/B2。

这种想法就是错的,C0执行的指令比较单一,但是其指令返回的数据确实非常关键,里面的内容决定了该文件的特性,下一步能执行什么操作

6.fcp内容分析

示例1:B0

2FE2:62178202412183022FE28A01058B032F06018002000A880110

所属字节 原始内容 内容分析
1 62 FCP模块标签
2 17 FCP模块的长度(十进制:23)
3 82 文件描述符标签
4 02 文件描述符长度(十进制:2)
5 41 文件描述符(工作EF 透明文件 共享文件)
6 21 文件描述符数据编码
7 83 文件标识符标签
8 02 文件标识符长度(十进制:2)
9-10 2FE2 文件标识符
11 8A 生命周期标签
12 01 生命周期长度(十进制:1)
13 05 生命周期(操作状态-激活)
14 8B 安全特性标签
15 03 安全特性长度(十进制:3)
16-17 2F06 EF_ARR的文件标识符
18 04 EF_ARR中对应的记录数(十进制:4)
19 80 文件大小标签
20 02 文件大小长度(十进制:2)
21-22 000A 文件大小(十进制:10)
23 88 短文件标识符标签
24 01 短文件标识符长度(十进制:1)
25 10 短文件标识符

示例2:B2

2F06:621A82054221002C0783022F068A01058B032F060480020134880130

所属字节 原始内容 内容分析
1 62 FCP模块标签
2 1A FCP模块的长度(十进制:26)
3 82 文件描述符标签
4 05 文件描述符长度(十进制:5)
5 42 文件描述符(工作EF 线性固定文件 共享文件)
6 21 文件描述符数据编码
7-8 002C 记录长度(十进制:44)
9 07 记录个数(十进制:7)
10 83 文件标识符标签
11 02 文件标识符长度(十进制:2)
12-13 2F06 文件标识符
14 8A 生命周期标签
15 01 生命周期长度(十进制:1)
16 05 生命周期(操作状态-激活)
17 8B 安全特性标签
18 03 安全特性长度(十进制:3)
16-17 2F06 EF_ARR的文件标识符
18 04 EF_ARR中对应的记录数(十进制:4)
19 80 文件大小标签
20 02 文件大小长度(十进制:2)
21-22 0134 文件大小(十进制:10)
23 88 短文件标识符标签
24 01 短文件标识符长度(十进制:1)
25 30 短文件标识符

第五个字节即文件描述符

始内容 内容分析
41 透明文件 B0
42 线性固定文件 B2
46 循环文件 B2
78 MF/DF C0/F2

你可能感兴趣的:(5-SIM数据交互之-C0(GET RESPONSE))