最近因研究了下银联借记/贷记应用卡片规范,发现网上可参考资源较少,于是萌生了写下这篇文字的想法,希望可以帮助到有需要的兄弟姐妹,有描述不清晰或者有错误的地方欢迎指正。

下面进入正题,测试使用的卡是招商银行的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卡读卡流程详解--读卡器与卡交互指令相关推荐

  1. M1卡区块控制位详解

    M1卡区块控制位详解 Mifare 1S50/Mifare 1S70 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制.存取控制为4个字节,共32位,扇区中的每个块(包括 ...

  2. EPLAN安装详解(附卡顿解决方法)

    EPLAN安装详解(附卡顿解决方法) [首先关掉防火墙,关掉杀毒软件,关掉实时防护,这样避免出错] 1.打开"Electric P8 2.7.3.11418"目录,以管理员身份 运 ...

  3. android 6.0 存储卡,Android 6.0区别U盘和SD卡设备的方法详解

    如下所示: public static boolean isSdcardExists(Context context) { StorageManager storageManager = Storag ...

  4. U-Boot启动流程详解

    参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍 作者:一只青木呀 发布时间: 2020-10-23 13:52:23 网址:https://blog.csdn.net/weixin ...

  5. 【正点原子Linux连载】第三十二章 U-Boot启动流程详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  6. IMS AKA鉴权及应用流程详解

    IMS AKA鉴权及应用流程详解 @auth doubleRabbit @date 2017-03-14 目的 了解鉴权及通信类业务相关鉴权算法的概念原理 了解IMS注册流程 了解IMS鉴权流程应用 ...

  7. lol澳洲服务器如何注册账号,云顶之弈手游澳服怎么进 LOL手游澳服账号注册流程详解[多图]...

    云顶之弈手游澳服作为国内玩家比较多的服务器,不仅可以偶遇到国内好友还可以遇到国际友人哦,那么具体服务器进入方法就让安族66来告诉大家吧~ LOL手游澳服账号注册流程详解 [云顶之弈手游已经开放注册 如 ...

  8. MySQL系列---架构与SQL执行流程详解

    文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...

  9. 《猿族崛起》动作捕捉技术及制作流程详解

    前言: 其实最近两个月发布的原创文章,最初动机都是来自于<猿族崛起>,之前并没有太关注这部片子,后来偶然在火星时代上看到Weta发布的特效制作花絮,然后简介说是启用了<阿凡达> ...

最新文章

  1. 现在无法开始异步操作。异步操作只能在异步处理程序或模块中开始,或在页生存期中的特定事件过程中开始...
  2. linux arm gcc 内联汇编参考手册
  3. 三星s轻奢android+p,三星Galaxy S轻奢版5月21日将至:骁龙660处理器+安卓8.0
  4. 树的最小支配集、最小点覆盖、最大独立集【模板】
  5. Java入门算法(双指针篇)丨蓄力计划
  6. Java并发(9)- 从同步容器到并发容器
  7. SSH密钥 - 仍然要求输入密码和密码
  8. Linux安装和卸载JDK
  9. 【数据库原理实验(openGauss)】实验报告
  10. C#字符串转Json,Json解析
  11. (2020全新)UGNX二次开发(零基础入门)到提高全套视频教程_NXopen-UG二次开发_新浪博客
  12. windows11中windows安全中心打不开的解决办法
  13. 【亲测有效】C盘扩展卷灰色的解决办法
  14. 赛格威机器人待遇_赛格威机器人:泊车助理只是应用之一,开发者计划让机器人有无限可能...
  15. 办公技能01:最简单的调整图片分辨率方法——用windows自带的画图功能
  16. 2 第二章 集群环境搭建(kubeadm 方式)
  17. qlist 嵌套_QList内存释放
  18. 单片机c语言篮球比分_单片机课程设计篮球计时计分器正文1
  19. 星际战甲堕落轰击者结合目标_星际战甲牺牲任务流程
  20. VMware:速修复这三个严重的 Workspace ONE Assist 软件漏洞

热门文章

  1. Spring Boot(二): 集成Mybatis
  2. 支付宝当面付打shang系统源码分享
  3. oracle查询同一天生日的,数据分析经典问题:两个朋友同一天过生日的概率?
  4. HTTP/HTTPS与流量劫持/DNS劫持
  5. 制造企业该如何选择MES生产管理系统?盘点四大生产管理系统软件
  6. 输入三个数按从小到大顺序输出_攀枝花数显型耐压测试仪公司,期待合作
  7. Java产品:CRM客户关系管理系统
  8. 足球网页设计制作 简单足球静态HTML网页作品 足球网页作业成品 学生体育运动足球网站模板
  9. Debian11 更换软件源
  10. QtVtk-001-编译