6月份去杭州入手杭州通一张,跟@苗_条_肥_仔 学习一起测试杭州通。测试过程记录如下。
1.SELECT 选择MF
C-APDU:
00A4000002 3F00
R-APDU:
6F15840E315055422E5359532E4444463031A503880101 9000
不知道杭州通的入口名字,直接选择MF 3F00了。
解析一下TLV结构,6F是FCI模板,84后面是DF的名字“1PUB.SYS.DDF01”(感谢@智能卡技术
纠正),上电直接使用名字选择“1PUB.SYS.DDF01”也是可以成功的。A5是FCI专用数据,88是目录基本文件的SFI。
2.READ
RECORD 读一下目录下的文件
C-APDU:
00B2010C00
R-APDU:
7011610F4F09A0000000038698070150023F01
9000
解析TLV后,Tag
4F就是应用标识符AID: A00000000386980701,Tag
50是应用标签:3F01。
3.SELECT
选择AID
C-APDU:
00A4040009 A00000000386980701
R-APDU:
6F2E8409A00000000386980701A5219F0C1E847531000000000000003100 310000002045887820140614 206406140000 9000
响应是电子存折/钱包规范中SELECT ADF的响应,解析TLV Tag
9F0C是发卡行自定义数据,数据域用蓝色标注出来了,数据的意义没有研究。
4.GET BALANCE
先查下余额
C-APDU:
805C000204
R-APDU:
00000F44 9000
余额是F44,就是39.08元
5.READ RECORD
读交易明细
C-APDU:
00B201C417
R-APDU:
00080000000000016C093100 0102931320140614173611 9000
6.READ RECORD
继续读明细
C-APDU:
00B202C417
R-APDU:
000700000000000000093100 0102916220140614171645 9000
7.READ RECORD
继续读明细
C-APDU: 00B203C417
R-APDU:
0006000000000000B6093100 0102916620140614154024 9000
8.READ RECORD
继续读明细
C-APDU: 00B204C417
R-APDU: 000500000000000000093100 0102901320140614151910 9000
9.READ RECORD
继续读明细
C-APDU: 00B205C417
R-APDU: 0004000000000000B6093100 0102902120140614140953 9000
10.READ RECORD
继续读明细
C-APDU: 00B206C417
R-APDU: 000300000000000000093100 0102907920140614140031 9000
11.READ RECORD
继续读明细
C-APDU: 00B207C417
R-APDU: 0002000000000000B6093100 0102907220140614085525 9000
12.READ RECORD
继续读明细
C-APDU: 00B208C417
R-APDU: 000100000000000000093100 0102911420140614084815 9000
13.READ RECORD
继续读明细
C-APDU: 00B209C417
R-APDU: 6A83
5~13条指令一直在读交易记录,直到返回6A83,一共读出了8条交易记录,感谢@苗_条_肥_仔
给的日志格式,我这边还在PBOC的文档上找呢。
看数据很明显前两字节表示交易的序号(当然也许是第二字节,但是一个字节表示有些短啊)。
继续很明显的容易知道,数据域的最后7字节表示交易时间格式是YYYY-MM-DD-HH-MM-SS。
比如第12条命令的响应数据中可以知道,这张卡片的第一次交易发生在2014年6月14日8点48分15秒,这个跟我购买卡片的时间对上了,我是是差不多在那个时候在杭州地铁城站站上车的。
这8条记录,是记录了在杭州地铁的进出站信息,没有公交车乘车信息,第8~9字节是消费金额,当然出站才有金额,最后一次好像是南宋御街那边的定安路站做到杭州东站,要3块多钱,好贵啊。
后面的几个字节是终端的编号,手里小票上地铁圈存机的编号就是0108xxxx这样的格式。
14.READ BINARY
读公共应用基本数据文件
C-APDU:
00B095001E
R-APDU:
847531000000000000003100 310000002045887820140614 206406140000
9000
响应数据符合ED和EP应用的公共应用基本数据文件的格式,并且跟我的充值小票上的信息吻合。
解析一下:
84 75 31 00 00 00 00 00 00 00
31 00 31 00 00 00 20 45 88 78 20 14 06 14 20 64 06 14 00
00
84 75 31 00 00 00 00 00
是发卡方标识
00 是应用类型标识,表示保留
00 是发卡方应用版本
31 00 31 00 00 00 20 45 88 78
是应用序列号 --这个和充值小票的应用序列号相符
20 14 06 14 是应用启用日期
--这个的确是购卡日期
20 64 06 14 是应用有效日期
--50年有效期?
00 00 是
发卡文自定义FCI数据
15.READ BINARY
读0x05文件
C-APDU: 00B0850000
R-APDU:
1700002099010101E0000000 000000000000000000000000 000000000000000000000000 000000000000000000000000
9000
16.READ BINARY
读0x15文件
C-APDU: 00B0950000
R-APDU:
847531000000000000003100 310000002045887820140614 206406140000
9000