这两天在搞ETC卡圈存,把PBOC又捡起来好好学了一下,以前只是一知半解,这次对PBOC算是入门了。
目录
(2)READ BINARY (读取透明EF文件的内容(或部分内容))
(6)INITIALIZE FOR LOAD (电子钱包圈存命令中的圈存初始化)
(7)CREDIT FOR LOAD (电子钱包圈存命令中的圈存)
IC卡芯片结构
(1)文件结构
——专用文件(DF)。
——基本文件(EF)。
卡内数据的逻辑组织结构由下列专用文件的结构化分级组成。
——在根处的DF称作主文件(MF)。该MF是必备的。
——其他DF是任选的。
定义了下列两种类型的EF。
——内部EF——那些EF预期用于存储由卡所解释的数据,即,为了管理和控制目的由卡所分析和使用的数据。
——工作的EF——那些EF预期用于不由卡所解释的数据,即,仅仅由外界待使用的数据。
上图:
(2)APDU报文组成
APDU由下列内容组成:
——必备的4字节首标(CLA INS P1 P2);
——有条件的可变长度主体。
(首标) [CLA INS P1 P2] [Lc字段][数据字段][Le字段] (主体)
PBOC常用命令
(1)SELECT (选择)
SELECT命令报文编码见表61:
代码 | 值 |
---|---|
CLA | ‘00’ |
INS | ‘A4’ |
P1 | 引用控制参数(见表62) |
P2 | ‘00’第一个或仅有一个‘02’下一个 |
Lc | ‘05’-’10’ Data的长度 |
Data | 文件名 |
Le | ‘00’ |
表- 61 SELECT命令报文
表62定义了命令报文中的引用控制参数:
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含 义 |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | ||||
1 | 通过文件名选择 | |||||||
0 | 0 |
表- 62 SELECT命令引用控制参数
选择命令有两种方式:
1、通过地址访问比如访问3F00命令就是00 A4 00 00 02 3F00
2、通过文件名访问比如访问1PAY.SYS.DDF01 命令就是00 A4 04 00 0E 315041592E5359532E4444463031
315041592E5359532E4444463031为1PAY.SYS.DDF01的ASCII码 16进制的
(2)READ BINARY (读取透明EF文件的内容(或部分内容))
READ BINARY命令报文编码见表53:
代码 | 值 |
---|---|
CLA | ‘00’或’04’ |
INS | ‘B0’ |
P1 | 见表54 |
P2 | 从文件中读取的第一个字节的偏移地址 |
Lc | 不存在;(CLA=’04’时除外) |
Data | 不存在;(CLA=’04’时,应包括MAC) |
Le | ‘00’ |
表- 53 READ BINARY命令报文
表54定义了命令报文中的引用控制参数:
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含 义 |
---|---|---|---|---|---|---|---|---|
X/1 | 读取模式:-用SFI方式 | |||||||
0 | 0 | RFU(如果b8=1) | ||||||
X | X | X | X | X | SFI(取值范围21-30) |
表- 54 READ BINARY命令引用控制参数
若P1的高三位为100,则低5位为短的文件标识符,P2为读的偏移量。 若P1的最高位不为1,则P1P2为欲读文件的偏移量,所读文件为当前文件。
Le表示要读取的字节数。
例如我们要读0015文件的前8字节,那么就需要发送‘00 B0 95 00 08’
95的组成0015(十六进制)的二进制是00010101 b8是1 就是10010101 就是十六进制15
(3)READ RECORD(读到非透明AEF文件)
READ RECORD命令报文编码见表57:
代码 | 值 |
---|---|
CLA | ‘00’或’04’ |
INS | ‘B2’ |
P1 | 记录的个数 |
P2 | 引用控制参数(见表58) |
Lc | 不存在(CLA=’04’时除外) |
Data | 不存在(CLA=’04’时除外) |
Le | ‘00’ |
表- 57 READ RECORD命令报文
表58定义了命令报文中的引用控制参数:
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含 义 |
---|---|---|---|---|---|---|---|---|
X | X | X | X | X | 1 | 0 | 0 | b4-b8为短文件标识符 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 当前文件 |
表- 58 READ RECORD命令引用控制参数
例如我们要读记录文件0019的第一条记录的前2字节,那么我们可以发送‘00 B2 01 CC 02’
CC的组成0019(十六进制)的二进制是00011001后面接100就是11001100就是十六进制CC
(4)VERIFY (校验PIN)
VERIFY命令报文编码见表76:
代码 | 值 |
---|---|
CLA | ‘00’ |
INS | ‘20’ |
P1 | ‘00’ |
P2 | ‘00’ |
Lc | 可变 |
Data | 外部输入的个人密码 |
Le | 不存在 |
表- 76 VERIFY命令报文
P2=’00’表示无特殊限定符被使用。在IC卡上,VERIFY命令在处理过程中应明确知道如何去寻找个人密码。
例如密码是123456命令就是00 20 00 00 06 313233343536
313233343536为123456的ASCII码 十六进制
(5)GET BLANCE (电子钱包圈存命令中的读余额)
代码 | 值 |
---|---|
CLA | ‘80’ |
INS | ‘5C’ |
P1 | ‘00’ |
P2 | ‘01’ 或 ‘02’; ‘01’用于ED余额查询,‘02’用于EP余额查询。其他值保留 |
LC | 不存在 |
Data | 不存在 |
Le | ‘04’或‘00’ |
命令805C000204就是读余额
(6)INITIALIZE FOR LOAD (电子钱包圈存命令中的圈存初始化)
代码 | 值 |
---|---|
CLA | ‘80’ |
INS | ‘50’ |
P1 | ‘00’ |
P2 | ‘01’ 或 ‘02’;‘01’ 用于ED圈存交易,‘02’ 用于EP圈存交易。其他值保留。 |
Lc | ‘0B’ |
Data | 见表29 |
Le | ‘10’或‘00’ |
表29定义了命令报文中的数据域:
说明 | 长度(字节) |
---|---|
密钥索引号 | 1 |
交易金额 | 4 |
终端机编号 | 6 |
命令返回
说明 | 长度(字节) |
---|---|
ED或EP余额 | 4 |
ED或EP联机交易序号 | 2 |
密钥版本号(DLK) | 1 |
算法标识(DLK) | 1 |
伪随机数(IC卡) | 4 |
MAC1 | 4 |
例如80 50 00 02 0B 0100000064000033440087 10
(7)CREDIT FOR LOAD (电子钱包圈存命令中的圈存)
代码 | 值 |
---|---|
CLA | ‘80’ |
INS | ‘52’ |
P1 | ‘00’ |
P2 | ‘00’ |
Lc | ‘0B’ |
Data | 见表6 |
Le | ‘04’或‘00’ |
表6描述了命令报文中的数据域:
说明 | 长度(字节) |
---|---|
交易日期(主机) | 4 |
交易时间(主机) | 3 |
MAC2 | 4 |
命令返回
说明 | 长度(字节) |
---|---|
TAC | 4 |
例如命令80 52 00 00 0B 2018091816553312345678
补充
(1)GET RESPONSE(取返回命令)
当SELECT和READ 命令返回61XX的时候要用这个命令取数据
代码 | 值 |
---|---|
CLA | ‘00’ |
INS | ‘C0’ |
P1 | ‘00’ |
P2 | ‘00’ |
Lc | 不存在 |
Data | 不存在 |
Le | 响应的期望数据最大长度 |
例如返回6120那么就该发送00 C0 00 00 20
(2)返回代码表
SW1 | SW2 | Description |
---|---|---|
90 | 00 | 正确执行 |
61 | XX | 正确执行XX表示响应数据长度。可用Get Response命令取回响应数据。(仅用于T=0) |
62 | 81 | 回送的数据可能错误 |
62 | 83 | 选择文件无效,文件或密钥校验错误 |
63 | CX | X表示还可再试次数 |
64 | 00 | 状态标志未改变 |
65 | 81 | 写EEPROM不成功 |
67 | 00 | 错误的长度 |
69 | 00 | CLA与线路保护要求不匹配 |
69 | 01 | 无效的状态 |
69 | 81 | 命令与文件结构不相容 |
69 | 82 | 不满足安全状态 |
69 | 83 | 密钥被锁死 |
69 | 85 | 使用条件不满足 |
69 | 87 | 无安全报文 |
69 | 88 | 安全报文数据项不正确 |
6A | 80 | 数据域参数错误 |
6A | 81 | 功能不支持或卡中无MF或卡片已锁定 |
6A | 82 | 文件未找到 |
6A | 83 | 记录未找到 |
6A | 84 | 文件无足够空间 |
6A | 86 | 参数P1 P2错误 |
6B | 00 | 在达到Le/Lc字节之前文件结束,偏移量错误 |
6C | XX | Le错误 |
6E | 00 | 无效的CLA |
6F | 00 | 数据无效 |
93 | 02 | MAC错误 |
93 | 03 | 应用已被锁定 |
94 | 01 | 金额不足 |
94 | 03 | 密钥未找到 |
94 | 06 | 所需的MAC不可用 |