ETC卡PBOC操作

这两天在搞ETC卡圈存,把PBOC又捡起来好好学了一下,以前只是一知半解,这次对PBOC算是入门了。

目录

IC卡芯片结构

(1)文件结构

(2)APDU报文组成

PBOC常用命令

(1)SELECT (选择)

(2)READ BINARY (读取透明EF文件的内容(或部分内容))

(3)READ RECORD(读到非透明AEF文件)

(4)VERIFY (校验PIN)

(5)GET BLANCE (电子钱包圈存命令中的读余额)

(6)INITIALIZE FOR LOAD (电子钱包圈存命令中的圈存初始化)

(7)CREDIT FOR LOAD (电子钱包圈存命令中的圈存)

补充

(1)GET RESPONSE(取返回命令)

(2)返回代码表


 

 

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定义了命令报文中的引用控制参数:

b8b7b6b5b4b3b2b1含 义
00000    
     1  通过文件名选择
      00 

表- 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定义了命令报文中的引用控制参数:

b8b7b6b5b4b3b2b1含 义
X/1       读取模式:-用SFI方式
 00     RFU(如果b8=1)
   XXXXXSFI(取值范围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定义了命令报文中的引用控制参数:

b8b7b6b5b4b3b2b1含 义
XXXXX100b4-b8为短文件标识符
00000100当前文件

表- 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
MAC14

例如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
MAC24

命令返回

说明长度(字节)
TAC4

例如命令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)返回代码表

SW1SW2Description
9000正确执行
61XX正确执行XX表示响应数据长度。可用Get Response命令取回响应数据。(仅用于T=0)
6281回送的数据可能错误
6283选择文件无效,文件或密钥校验错误
63CXX表示还可再试次数
6400状态标志未改变
6581写EEPROM不成功
6700错误的长度
6900CLA与线路保护要求不匹配
6901无效的状态
6981命令与文件结构不相容
6982不满足安全状态
6983密钥被锁死
6985使用条件不满足
6987无安全报文
6988安全报文数据项不正确
6A80数据域参数错误
6A81功能不支持或卡中无MF或卡片已锁定
6A82文件未找到
6A83记录未找到
6A84文件无足够空间
6A86参数P1 P2错误
6B00在达到Le/Lc字节之前文件结束,偏移量错误
6CXXLe错误
6E00无效的CLA
6F00数据无效
9302MAC错误
9303应用已被锁定
9401金额不足
9403密钥未找到
9406所需的MAC不可用
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值