ETC卡的协议分析

本文主要参考《ETC交易IC卡操作说明.doc》和《ETC用户卡数据规范.pdf》进行理解,其实文档中已经详细的描述了指令部分,

这里解释下圈存的含义:这里直接拷贝百度的一段回答过来,意思基本就是将银行卡里的钱划到IC卡上的过程。等划过去之后,就可以用IC卡进行消费。
中国石化加油卡单用户圈存是什么意思
你办卡时在石化IC卡系统数据库里有一个账号,账号里存着你的数据,这个账号下面对应着一张IC卡(单用户),多张时有一张是母卡。你到加油站加油时,用的是IC卡加油,IC卡上记录着你的金额会随着加油金额减少,直到这张IC卡里的金额为0后,IC卡就加不了油了。这时候怎么办,于是你自己或别人帮你在你的账号里交钱,但只交钱你的IC卡还是加不了油。为什么,因为钱的金额信息还没存入你的IC卡里去,于是你就得带你的IC卡到加油站的专门机上存贮一下信息,这样你的卡上有了数据又可以继续加油了。“单用户圈存”就是“带你的IC卡到加油站的专门机上存贮一下信息”的这一步骤。
多用户也是一样,只是多一个环节,就是把母卡上的钱分配给分卡的子账户而已,分配后分卡一样要去圈存。
至于的数据如何传送是关系到机密了,不能细说了

基本看文档就可以对ETC卡的基本信息进行读取,首先要熟悉文件目录,不要乱写电卡数据,可以随意读取,但是写一定要慎重,比如圈存初始化,权限校验的初始化等操作,如果卡是空卡,可能只有三次机会,有用户信息的可能是15次,超出了卡就锁死了。

ETC卡文件目录如图示:



文档中提到:基本的通信协议为:

1.命令格式

情形1

命令:

CLA

INS

P1

P2

00

应答:

SW1

SW2


情形2

命令:

CLA

INS

P1

P2

Le

应答:

Le字节DATA

SW1

SW2


情形3

命令:

CLA

INS

P1

P2

Lc

DATA

 应答:

SW1

SW2


情形4

命令:

CLA

INS

P1

P2

Lc

DATA

Le

应答:

Le字节DATA

SW1

SW2

说明:

  CLA指令类别

  INS指令类型的指令码

  P1P2指令参数

  Lc数据DATA长度

  DATA数据域或应答数据域

  Le要求返回数据长度,Le00表示返回卡中最大数据长度

--------------------------------------------------------------------------------------------分隔符-----------------------------------------------------------------------

那么所有的通信指令都要按照上述格式来发,下述所有的xx表示具体参数具体给,根据情况给定。

1:比如读二进制文件:00B0xxxxxx,

参数解释:

P1的高三位为100,则低5位为短的文件标识符,P2为读的偏移量。

P1的最高位不为1,则P1P2为欲读文件的偏移量,所读文件为当前文件。

Le表示要读取的字节数。

例如我们要读0015文件的前8字节,那么就需要发送‘00 B0 95 00 08’,由卡片返回的相应数据为‘11 22 33 44 55 66 77 88 90 00’。

那为什么是95就是要读15文件呢,因为16进制的15 = 00010101  95 = 10010101,高三位为100,也就是说:9500中,后五位10101为文件标识,00为偏移量。而低五位10101=15,为文件标识符,也就是读的是0015文件。

同样,要读16文件,则高三位为100,低五位为10110,转为16进制则为:96,也就是00 B0 96 00 08可以读16文件的八个字节。:

2: 选择文件00 A4 00 00 02 DF 01,

该命令中,没有要求返回数据长度,DF01为发送数据,所以可以返回sw1+sw2,sw1+sw2为返回状态码,成功则为9000
其中:DF01为选择读取的文件,见上图DF01根目录。

3: 读记录文件

00 B2 01 CC 02

P1表示要读取的文件的记录号。

P2标识要读取的短文件的标识符。

b8

b7

b6

b5

b4

b3

b2

b1

P2的含义

x

x

x

x

x

1

0

0

b4-b8为短文件标识符

0

0

0

0

0

1

0

0

当前文件

Le表示要读的文件的长度。

例如我们要读记录文件0019的第一条记录的前2字节,那么我们可以发送‘00 B2 01 CC 02’,卡片返回‘11 22 90 00’。

同上1分析:19 = 11001,加上100为111001100,则等于CC。读18文件则为18 = 11000,加上100为11000100,等于C4

4:

写二进制文件 00D6xxxxxxxx

若P1的高三位为100,则低5位为短的文件标识符,P2为写的偏移量。
    若P1的最高位不为1,则P1P2为欲写文件的偏移量,所写文件为当前文件。
Lc为要写文件的字节数。
    若为线路保护写,Lc为写入数据的长度+4字节MAC。
    若为加密线路保护写,Lc为加密后数据的长度+4字节MAC。
Data表示要写的数据的内容。

写二进制文件参考读二进制文件,不过写文件需要输入参数数据,也就是向卡片中写入的数据,而且写卡前需要校验权限,检验过才能写卡。


5:操作卡片的过程中总会遇到很多错误,状态码提示各种各样的错误,文档中对sw1+sw2也有说明:

注:当SW1的高半字节为‘9’,且低半字节不为‘0’时,其含义依赖于相关应用。

    SW1的高半字节为‘6’,且低半字节不为‘0’时,其含义与应用无关。

比如返回610c,按照解释则为:正常需发GET RESPONSE命令,

比如:63CF 警告 校验失败 ,则表示最多重试15次,超过卡就锁死了。


当然读卡过程中会返回很多数据,这个时候数据的具体含义要根据《ETC用户卡数据规范.pdf》来按位解释,可以得到具体的有用信息,比如车牌号,车主姓名,身份证号,有效期,卡片余额等一些信息。

基本上从文档中的描述来看,00b0,00b2等都为读记录,00a4为目录操作,80开头的指令基本就是计算DES,消费和圈存等操作。0082等为电卡权限验证。

文章中提到的文档我已经上传,参考链接:http://download.csdn.net/detail/bawang_cn/9718672



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值