EMV/PBOC 解析(二) 卡片数据读取
上一篇简单的了解了IC智能卡的文件结构和APDU报文,这篇我们直接来读取卡内的数据。下面我们主要参照《中国金融集成电路(IC)卡规范》。
好了废话不多说,下面贴指令:
(1)卡片接收一个来自终端的选择(SELECT)命令,请求选择 PSE(文件名“1PAY.SYS.DDF01”);
选择支付系统 PSE-1PAY.SYS.DDF01,在这里是规范规定的PSE的文件名为“1PAY.SYS.DDF01”
->00a404000E315041592E5359532E4444463031
结果->
6F 26
84 (DF名称) 0E 315041592E5359532E4444463031
A5 (FCI数据专用模板) 14(长度)
88 (目录基本文件的SFI) 01(长度) 01
5F2D (语言选择) 02 7A68
9F11 (发卡行代码表索引) 01 01
BF0C (发卡行自定义数据FCI)05 9F4D020B0A
9000 (SW1 SW2)
(2) GETDATA 获取数据
指令->00B2010C
结果->
70 28
61 26
4F 08 A000000333010101(AID)
50 0A 50424F43204445424954
9F12 0A 50424F43204445424954
87 01 01
9000
(3)根据AID=A000000333010101选择文件 获取ADF FCI
指令->00A4040008A000000333010101 //根据AID=A000000333(RID) 010101(认证中心公钥索引PKI)
结果->
6F 45
84 08 A000000333010101
A5 39
50 0A 50424F43204445424954(应用标签)
87 01 01
9F38 09 9F7A01 9F0206 5F2A02 //处理选项数据对象列表(PDOL)
*在应用初始化步骤,卡片在处理 GPO 命令时需要由终端提供的数据元的标识和、长度列表
5F2D 02 7A68
9F11 01 01
9F12 0A 50424F43204445424954(应用优先名称)
BF0C 05 9F4D020B0A
9000
(4)这里便可以读取电子现金余额等信息
例如:
指令->80CA9F79 /9F79:电子现金余额
结果 ->
9F79 06 000000000000 9000 //余额:00.00元
|----------------------------------------------|
| 9F6D:电子现金重置阈 |
| 9F77:电子现金余额上线 |
| 9F78:电子现金单笔交易限额 |
| 9F5D:脱机可用余额 |
| 9F6B:读取卡片 CVM 限额 |
|---------------------------------------------|
(5)下面就是比较关键的一步GPO的操作
首先需要用到步骤(3)可以获取到处理选项数据对象列表(PDOL)
PDOL:
9F7A01 (电子现金终端指示器): 01
9F0206 (授权金额):000000000000
5F2A02 (交易货币代码):0156
指令->80A800000B8309010000000000000156
结果->
80 16 7C00 (应用交互特征AIP)
08010200 (AFL应用文件定位器)
10040601 (AFL应用文件定位器)
18010200 (AFL应用文件定位器)
20010100 (AFL应用文件定位器)
28010100 (AFL应用文件定位器)
9000
[
********
7C00(应用交互特征AIP) => 7C[0(bit8) 1(bit7) 1(bit6) 1(bit5) 1(bit4) 1(bit3) 0(bit2) 0(bit1)]00
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
*********]
(6)下面是根据AFL读取文件,首先来解析下AFL
以第一个AFL为例: 08(SFI)01(第一个要读出的记录号) 02(最后一个要读出的记录号)00(存放用于脱机数据认证的数据的连续记录个数)
下面解析 SFI: 08
1. 16进制转为2进制的数据 -> 0000 1000
2. 加 0000 0100 ->0000 1100
3. 转为16进制 -> 0c
根据AFL读取文件:
指令 ->00B2010C
结果 ->
70 2B
57(二磁道等价数据) 12
62***********414(卡号,这里涉及到隐私就不贴出来了) D2411(有效日期 年/月 24/11) 22000000200000 F(补足)
9F1F(磁道一自定义数据) 14 3*3*3*3*3*30303030303*3*3*303032303*3*3* (一般存放的是身份证信息,但是有的银行是不存放的)
指令->00B2020C00
结果->
70(模板) 09 5F20(持卡人姓名) 02 2020(有的银行是存放的是姓名的拼音的ACII码,但是PBOC3.0建议不要存放私人信息) 9F62(证件类型) 01 00(身份证)
其它的AFL就不一一赘述了,有理解不正确的地方还请指正。
转载请注明出处 http://www.cnblogs.com/xinwang/p/4283671.html
EMV/PBOC 解析(二) 卡片数据读取的更多相关文章
- EMV/PBOC 解析(一) 卡片文件结构
刚到公司老大便发我一份文档<智能卡ISO7816-4规范(中文版)>,然后就让我研究下IC智能卡数据读取和支付.身为一直做.NET开发的我对硬件啥的一无所知,各种无头绪啊,研究了两天后,稍 ...
- zico源代码分析(二) 数据读取和解析部分
第一部分:分析篇 首先,看一下zico的页面,左侧是hostname panel,右侧是该主机对应的traces panel. 点击左侧zorka主机名,右侧panel会更新信息,在火狐浏览器中使用f ...
- [IOS微信] PList文件解析,boost数据读取
最近在解析IOS版微信数据中的 mmsetting.archive 文件时,第一次接触到PList文件. 注:mmsetting.archive 不是一个标准的PList文件,其中含有汉字,并且很多 ...
- EMV/PBOC解析(三) TLV格式解析(C#)
1.什么是TLV格式? TLV即Tag-Length-Value,常在IC卡与POS终端设备中通过这样的一个应用通信协议进行数据交换. 金融系统中的TLV是BER-TLV编码的一个特例编码规范,而BE ...
- 【转载】PyTorch系列 (二):pytorch数据读取
原文:https://likewind.top/2019/02/01/Pytorch-dataprocess/ Pytorch系列: PyTorch系列(一) - PyTorch使用总览 PyTorc ...
- 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性
本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...
- json进阶(一)js读取解析JSON类型数据
js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...
- geotrellis使用(二)geotrellis-chatta-demo以及geotrellis框架数据读取方式初探
在上篇博客(geotrellis使用初探)中简单介绍了geotrellis-chatta-demo的大致工作流程,但是有一个重要的问题就是此demo如何调取数据进行瓦片切割分析处理等并未说明,经过几天 ...
- js读取解析JSON类型数据(转)
谢谢博主,转自http://blog.csdn.net/beyond0851/article/details/9285771 一.什么是JSON? JSON(JavaScript Object Not ...
随机推荐
- myeclipse跟eclipse中使用github做版本控制工具
今天早上花了一上午的时间,了解了在myeclipse跟eclipse中使用github. 好吧 说说怎么做的,让大伙少走一点路,我就简单描述下,需要软件的私信我 第一:下载git 第二:靠谱.但是pu ...
- 一段jquery代码,保存
@CHARSET "UTF-8"; #table_id tbody tr.odd td:hover{ background-color:#93CFE5; } #table_id t ...
- REST和SOAP Web Service的比较
1.http://stevenjohn.iteye.com/blog/1442776 2.http://blog.csdn.net/cnyyx/article/details/7483766
- 利用TOAD实现把EXCEL数据导入oracle数据库
利用TOAD实现把EXCEL数据导入oracle数据库 工具: Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...
- 用Hopper搞定Mac迅雷的会员以及离线下载功能
转自 用Hopper搞定Mac迅雷的会员以及离线下载功能 先定位Mac迅雷的可执行文件 snakeninnys-iMac:~ snakeninny$ ls /Applications/Thunder. ...
- WPF命令
WPF的命令是经常使用的,在MVVM中,RelayCommand更是用得非常多,但是命令的本质究竟是什么,有了事件为什么还要命令,命令与事件的区别是什么呢?MVVM里面是如何包装命令的呢?命令为什么能 ...
- JS字符串常用方法
// 来自 http://www.runoob.com/js/js-strings.html var str01 = "odd open xboxone" , str02 ...
- NOI 193棋盘分割.cpp
193:棋盘分割 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分 ...
- Linux系统配置成简单的路由器
一.两个不同网段的子网相互访问或通信 废话不多说了,直接上图,一目了然吧. 按照如图配置,就可以实现两个不同网段的子网相互通信. 二.连接上网的配置: 如果想让这两个子网,不仅可以相互通信,而且还可以 ...
- thinkphp整合系列之支付宝RSA加密方式
thinkphp整合系列之支付宝RSA加密方式上篇博客写的是MD5加密方式:thinkphp整合系列之支付宝MD5加密方式扫码支付http://baijunyao.com/article/75 但是呢 ...