银联IC卡读卡流程详解--读卡器与卡交互指令
最近因研究了下银联借记/贷记应用卡片规范,发现网上可参考资源较少,于是萌生了写下这篇文字的想法,希望可以帮助到有需要的兄弟姐妹,有描述不清晰或者有错误的地方欢迎指正。
下面进入正题,测试使用的卡是招商银行的IC卡:
(一)应用选择
一张银联IC卡里面可能有多个应用,所谓应用就是卡片和终端之间的应用协议和相关的数据集,读卡器和卡的交互其实就是和应用的交互,卡的交易其实就是选择某个应用做交易。但目前卡商所生产的卡基本上都是一个应用,即便如此,但根据银联的规范,应用选择这个步骤也是必不可少的。
(1)首先是选择PSE文件1PAY.SYS.DDF01 ,使用的命令是select命令,这个命令的详解在JR/T 0025.5的附录B中有详细的介绍。
此处请求命令报文如下:00A404000E315041592E5359532E4444463031
卡片会返回:6F1E840E315041592E5359532E4444463031A50C5F2D027A689F1101018801019000
此处返回的结果是严格按照TLV格式来的,解析TLV格式的源程序我会在后续的文章中给出。此处解析出来的数据如下:
6F:FCI模板
84:DF名称
A5:FCI专用模板
88:目录基本文件的SFI (高三位为0,后面补100,进行读取文件数据)
5F2D:首选语言
9F11:发卡行代码表索引
BF0C:发卡行自定义数据--(该卡没有带此数据)
FCI(文件控制信息)包含FCI(短文件标识符),目录中的每个应用列出一个应用。
(2)会根据SFI 进行读记录,此处SFI为01,根据read record的规范,p2的高5位为SFI,低三位为100,故p2的值为0x0C。
此处请求命令报文为:00B2010C00
卡片返回:702861264F08A000000333010101500A50424F432044454249549F120A50424F432044454249548701019000
此处的返回结果也是按照TLV格式来编码的,解析后为:
4F : A000000333010101 应用标识符(AID)
50:50424F43204445424954 应用标签
9F12 : 50424F43204445424954 应用首选名称
87 : 01 应用优先指示器
(3)根据读取的记录的应用标识符加入AID列表,然后根据用户按键进行选择应用或者根据优先级选择应用。
此处请求命令的报文为:00A4040007A0000003330101
卡片返回:6F458408A000000333010101A539500A50424F432044454249548701019F38099F7A019F02065F2A025F2D027A689F1101019F120A50424F43204445424954BF0C059F4D020B0A9000
6F: FCI模板
84: DF名称
9F38: PDOL的数据(9F1A:终端国家代码;9F7A: 电子现金指示器,9F02:授权金额,5F2A:交易货币代码)
5F2D:首选语言
9F11: 发卡行代码表索引
(二)应用初始化,该命令报文的组合需要第三步返回的PDOL数据(9F38),根据GPO的规则生成的报文如下
请求命令报文:80A800000B83099F02065F2A02
卡片返回:80167C0008010100100101011003060018010100200101009000
此处返回的报文不是TLV格式,7C00为应用交互特征,解析:
bit8:保留;
bit7:1=支持SDA; 静态数据认证
bit6:1=支持DDA; 动态数据认证
bit5:1=支持持卡人认证
bit4:执行终端风险管理
bit3:支持发卡行认证
bit2:保留
bit1:1=支持CDA
字节2:保留
0801010010010101100306001801010020010100为AFL,AFL(应用文件定位器),每个AFL包括4个字节
字节1:bit8-bit4:SFI(短文件标识符)
bit3-bit1:000
字节2:文件中要读的第1个记录的记录号(不能为0)
字节3:文件中要读的最后一个记录的记录号(大于或等于字节2)
字节4:从字节2的记录好开始,用于静态数据记录的个数(从0开始,不大于(字节3)-(字节2)+1)
根据GPO返回的AFL,读文件。读文件号格式为:SFI左移3位,右边补100。
比如上面的08 十六进制就是 0000 1000 bit8-bit4才是SFI,所以真实的是:0000 0001 ,读取文件的时候,右补0100(表明读取指定记录) ,得到0000 1100,就是0x0c。同理,02文件就是:0x14
(三)读应用数据,根据第四步的AFL解析结果,可以组合出读应用数据的报文。
发送:00B2010C00
接受:707457136214830100237436D22112201464200755165F9F0B2D4C492058494E2020202020202020202020202020202020202020202020202020202020202020202020202020209F6128313432343239313938323035313434343136202020202020202020202020202020202020202020209F6201009000
发送:00B2011400
接受:704A5F24032211305F25031211215A0862148301002374365F3401009F0702FF008E0C000000000000000042031E039F0D05D8609CA8009F0E0500100000009F0F05D8689CF8005F280201569000
发送:00B2031400
接受:7081B39081B0A33373F56850C06B1DE59D93F4F2A362CEA2A57C37D5DC78E3BF84914B608A43ACD22539B6C0491E88652244D2A199E6516D0C6F3C632F65202561106420FA406F530AE8D39CAF6EA5730E4A5AB15763FB42EAFA0AEE69A9E69640642E29CA15D5449B7AB74411A50EF811ACDEF4D8F93004C423E77E55AC263DA89308FCC05E3E0AA599565590C83CCE7FF6B17602F1BD7DB22C48A5A039FB97C48A8FA16083CC56DD6FEC3C6E7E81F37DCA25A949EC9000
90:发卡行公钥证书--用于脱机数据认证
发送:00B2041400
接受:70488F0103920433DFA0159F3201039F4701039F482A737DBBA0A11741BD57FEDF1BE60C551A88A24A82B5EB3182642F217AFA986E04DB7AC2F38057FCE8AC019F49039F37049F4A01829000
发送:00B2051400
接受:70819393819088E48EC5AC68FD509E73786839978F465F4BDB905EF38B9FBD17147FE810EAB68EB5E86C4A23BA2E897A54892D1DAD75EE339C21603CB172C66CE312AA9B585D5F24A3827342D504AF9EC2E95407AA72CE527DC1C0BA4D051B8BA6282AEDEEE1D3725EC8CA91EC515903D7E100576B837F96ABCB789C10434AFEC23E30D33B509FBBFB40ACDB15DF282372B8F3FBC99D9000
93: 签名的静态应用数据-SDA
发送:00B2061400
接受:7081949F468190810A5485E3B940508DDFF1E6AC2BF5B8990742BC1E11146C8BFC46D8C3C425ABA2C264CE2F478C320D198FF03E090EA61ECA3CCCF493AA886EDAC940C2F0CDC248768204DF4DEC26758B18F67E9CC7AB84C7DA55F00BDF0127CAF12B09E93C1830120E5F700BAB5D9124F209037FC3BE5BC44D34153760CB5E79890B C5D00491681ECDD1C9844874D9B0DFFF81236C899000
9F46:IC卡公钥证书
发送:00B2011C00
接受:70488C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F21035F300202209F420201569F080200209000
发送:00B2012400
接受:70089F1401009F2301009000
解析后的结果如下:
8E : 000000000000000042031E03 持卡人验证方法(CVM)列表
9F07 : FF00 应用用途控制
9F0F : D8689CF800 发卡行行为代码(IAC)-联机
5F24 : 221130 应用失效日期
9F0E : 0010000000 发卡行行为代码(IAC)-拒绝
9F0D : D8609CA800 发卡行行为代码(IAC)-缺省
5A : 6214830100237436 应用主账号
5F28 : 0156 发卡行国家代码
5F34 : 00 应用主账号序列号
5F25 : 121121 应用生效日期
57 : 6214830100237436D22112201464200755165F 磁条2等效数据
9F61 : 31343234323931393832303531343434313620202020202020202020202020202020202020202020 持卡人证件号
9F62 : 00 证件类型:00身份证
9F0B : 4C492058494E202020202020202020202020202020202020202020202020202020202020202020202020202020 持卡人姓名
8F : 03 CA公钥索引 (PKI)
9F32 : 03 发卡行公钥指数
9F4A : 82 静态数据认证标签列表
92 : 33DFA015 发卡行公钥余数
9F47 : 03 IC卡公钥指数
9F48 : 737DBBA0A11741BD57FEDF1BE60C551A88A24A82B5EB3182642F217AFA986E04DB7AC2F38057FCE8AC01 IC卡公钥余数
9F49 : 9F3704 动态数据认证数据对象列表(DDOL)
5F30 : 0220 服务码
8D : 8A029F02069F03069F1A0295055F2A029A039C019F37049F2103 卡片风险管理数据对象列表2 (CDOL2)
8C : 9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E14 卡片风险管理数据对象列表1(CDOL1)
9F08 : 0020 应用版本号
9F42 : 0156 应用货币代码
9F23 : 00 连续脱机交易上限
9F14 : 00 连续脱机交易下限
9F468190810A5485E3B940508DDFF1E6AC2BF5B8990742BC1E11146C8BFC46D8C3C425ABA2C264CE2F478C320D198FF03E090EA61ECA3CCCF493AA886EDAC940C2F0CDC248768204DF4DEC26758B18F67E9CC7AB84C7DA55F00BDF0127CAF12B09E93C1830120E5F700BAB5D9124F209037FC3BE5BC44D34153760CB5E79890B C5D00491681ECDD1C9844874D9B0DFFF81236C899000
9F46:IC卡公钥证书
93819088E48EC5AC68FD509E73786839978F465F4BDB905EF38B9FBD17147FE810EAB68EB5E86C4A23BA2E897A54892D1DAD75EE339C21603CB172C66CE312AA9B585D5F24A3827342D504AF9EC2E95407AA72CE527DC1C0BA4D051B8BA6282AEDEEE1D3725EC8CA91EC515903D7E100576B837F96ABCB789C10434AFEC23E30D33B509FBBFB40ACDB15DF282372B8F3FBC99D9000
93: 签名的静态应用数据-SDA
9081B0A33373F56850C06B1DE59D93F4F2A362CEA2A57C37D5DC78E3BF84914B608A43ACD22539B6C0491E88652244D2A199E6516D0C6F3C632F65202561106420FA406F530AE8D39CAF6EA5730E4A5AB15763FB42EAFA0AEE69A9E69640642E29CA15D5449B7AB74411A50EF811ACDEF4D8F93004C423E77E55AC263DA89308FCC05E3E0AA599565590C83CCE7FF6B17602F1BD7DB22C48A5A039FB97C48A8FA16083CC56DD6FEC3C6E7E81F37DCA25A949EC9000
90:发卡行公钥证书--用于脱机数据认证
(四)生成应用密文,根据上面读取的“卡片风险管理数据对象列表1(CDOL1)”生成该命令。
请求命令报文:80AE40002E00000000000900000000000001560000800000015610041000B84FBA072019024C4E00000000000000000000000000000000000000
卡片返回:801E800012E70CB84C238601F207010103A020000100000000007B168F919000
返回的数据解析:密文信息数据(L:1) + 应用交易计数器(L:2) + 应用密文(L:8) + 发卡行应用数据
至此,读卡的整个过程结束。
---------------------
作者:o0雨后彩虹0o
来源:CSDN
原文:https://blog.csdn.net/kxd_ysheng/article/details/21178101
版权声明:本文为博主原创文章,转载请附上博文链接!
银联IC卡读卡流程详解--读卡器与卡交互指令相关推荐
- M1卡区块控制位详解
M1卡区块控制位详解 Mifare 1S50/Mifare 1S70 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制.存取控制为4个字节,共32位,扇区中的每个块(包括 ...
- EPLAN安装详解(附卡顿解决方法)
EPLAN安装详解(附卡顿解决方法) [首先关掉防火墙,关掉杀毒软件,关掉实时防护,这样避免出错] 1.打开"Electric P8 2.7.3.11418"目录,以管理员身份 运 ...
- android 6.0 存储卡,Android 6.0区别U盘和SD卡设备的方法详解
如下所示: public static boolean isSdcardExists(Context context) { StorageManager storageManager = Storag ...
- U-Boot启动流程详解
参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍 作者:一只青木呀 发布时间: 2020-10-23 13:52:23 网址:https://blog.csdn.net/weixin ...
- 【正点原子Linux连载】第三十二章 U-Boot启动流程详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- IMS AKA鉴权及应用流程详解
IMS AKA鉴权及应用流程详解 @auth doubleRabbit @date 2017-03-14 目的 了解鉴权及通信类业务相关鉴权算法的概念原理 了解IMS注册流程 了解IMS鉴权流程应用 ...
- lol澳洲服务器如何注册账号,云顶之弈手游澳服怎么进 LOL手游澳服账号注册流程详解[多图]...
云顶之弈手游澳服作为国内玩家比较多的服务器,不仅可以偶遇到国内好友还可以遇到国际友人哦,那么具体服务器进入方法就让安族66来告诉大家吧~ LOL手游澳服账号注册流程详解 [云顶之弈手游已经开放注册 如 ...
- MySQL系列---架构与SQL执行流程详解
文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...
- 《猿族崛起》动作捕捉技术及制作流程详解
前言: 其实最近两个月发布的原创文章,最初动机都是来自于<猿族崛起>,之前并没有太关注这部片子,后来偶然在火星时代上看到Weta发布的特效制作花絮,然后简介说是启用了<阿凡达> ...
最新文章
- 现在无法开始异步操作。异步操作只能在异步处理程序或模块中开始,或在页生存期中的特定事件过程中开始...
- linux arm gcc 内联汇编参考手册
- 三星s轻奢android+p,三星Galaxy S轻奢版5月21日将至:骁龙660处理器+安卓8.0
- 树的最小支配集、最小点覆盖、最大独立集【模板】
- Java入门算法(双指针篇)丨蓄力计划
- Java并发(9)- 从同步容器到并发容器
- SSH密钥 - 仍然要求输入密码和密码
- Linux安装和卸载JDK
- 【数据库原理实验(openGauss)】实验报告
- C#字符串转Json,Json解析
- (2020全新)UGNX二次开发(零基础入门)到提高全套视频教程_NXopen-UG二次开发_新浪博客
- windows11中windows安全中心打不开的解决办法
- 【亲测有效】C盘扩展卷灰色的解决办法
- 赛格威机器人待遇_赛格威机器人:泊车助理只是应用之一,开发者计划让机器人有无限可能...
- 办公技能01:最简单的调整图片分辨率方法——用windows自带的画图功能
- 2 第二章 集群环境搭建(kubeadm 方式)
- qlist 嵌套_QList内存释放
- 单片机c语言篮球比分_单片机课程设计篮球计时计分器正文1
- 星际战甲堕落轰击者结合目标_星际战甲牺牲任务流程
- VMware:速修复这三个严重的 Workspace ONE Assist 软件漏洞