银联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 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值