PBOC卡片应用分析(二)

接上一篇,上次基本上卡在了选择ADF之后的操作,选择完ADF之后根据Response的数据,需要做获取处理选项GPO,但是对PDOL这个东西一直搞不明白,GPO指令的数据域是PDOL,PBOC规范上对GPO的指令写的也是很模糊,只说了没有PDOL的发8300,有PDOL项的发PDOL,但是泛泛的浏览PBOC规范,对选择应用之后返回的数据中PDOL的内容也没有细说,折腾了半天才反应过来PDOL的格式,仔细对照规范对PDOL的解析如下。
+-----------+----------+-------------------+----+---------+----+--------------+-----+
| PDOL的Tag | PDOL长度 | 电子现金指示器Tag |    |授权金额 |    交易货币代码 |     |
+-----------+----------+-------------------+----+---------+----+--------------+-----+
|   9F38    |   09     |     9F7A          | 01 |  9F02   | 06 |     5F2A     | 02  |
+-----------+----------+-------------------+----+---------+----+--------------+-----+
下面发送GPO指令,这个PBOC3.0规范上关于GPO的APDU的描述Lc固定值写为0,不知道这一部分是哪个单位的人写的,Lc明显不能写成0啊,开始我还老老实实的写0,仔细想,即使没有PDOL,Data域也要发8300,Lc也得为2的,如果符合了PBOC3.0的规范,那就跟7816规范矛盾了,必须是起草者写错了。下面对GPO命令报文按我自己的修正后的说明一下以防又有人跟我已经糊里糊涂的。
 APDU 取值说明 
 CLA 80 
 INS A8
 P1,P2 00
 Lc PBOC3.0规范上写的是0,实际应该是数据域长度 
 Data  83+PDOL的部分,直接把Tag 9F38之后的部分填充进来即可,如果没有PDOL那么就是83+00
 Le

下面发送GPO指令
7.GPO
APDU:80A800000B 83099F7A019F02065F2A02
SW1SW2:6114

8.GET RESPONSE
APDU:00C0000014
RETURN:80127C0008010100100103011007070018010400
SW1SW2:9000

规范中说GPO的Reaponse数据中应该是一个BER-TLV编码的数据对象,有两种格式一种是标签为‘80’,一种是标签为‘77’,这个明显是标签为‘80’的。数据对标表示了AIP和AFL。AIP列出了交易在处理过程中执行的功能;AFL列出交易需要读出的数据存放的短文件标识符、记录号、记录个数以及脱机数据认证需要的静态签名数据的存放位置。
下面对报文进行解析,在规范上没有看太明白,一边baidu一边看规范进行解析的。
80是Tag,12是长度,7C00是AIP.
7C00按照规范是
 bit  
 bit8=0  规范说1=RFU
 bit7=1 支持SDA 
 bit6=1 支持DDA 
 bit5=1 支持持卡人认证
 bit4=1 执行终端风险管理 
 bit3=1 支持发卡行认证 
 bit2=0 0=RFU 
 bit1=0 不支持CDA 
 第2字节 RFU=0 

后面4字节08010100应该就是AFL了。
08-短文件标示符,01-第一个要读出的记录号,01-最后一个要读出的记录号,00-存放用于脱机数据认证的数据的连续记录个数,字节2指出的是第1条要读的记录号。

下面要根据AFL的指示读取SFI指向的文件,文件号格式是SFI左移3位,右边补100,字节0x80中表示SFI的是bit8~bit4,所以0000 1000中只有0000 1是SFI,按前面的规则处理后文件号格式就是01100就是0x0C,所以构造APDU读一下记录。

9.READ RECORD
APDU:00B2010C00
SW1SW2:6C3C

调整一下Le重新下发APDU

10.READ RECORD
APDU:00B2010C3C
RETURN:703A5 后面跟了58字节数据涉及我自己隐私就不发出来了
SW1SW2:9000

数据等价二磁道数据,包含了持卡人姓名,证件号码,证件类型等信息

继续往后读下一个文件

11.READ RECORD
APDU:00B2011400
SW1SW2:6C44

调整一下Le重新发指令

12.READ RECORD
APDU:00B2011444
RETURN:一堆私人数据
SW1SW2:9000

13.READ RECORD
APDU:00B2021400
SW1SW2:6CBA

14.READ RECORD
APDU:00B20214BA
RETURN:一堆私人数据 稍后分析。
SW1SW2:9000
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值