zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    laydate 监听日期切换
    done
    Could not find result map java.util.HashMap
    toFixed
    js追加元素
    input只能输入数字或两位小数
    JSTree[树形控件]
    JSp获取到当前用户的全部session
    layui select change
    大型网站技术架构读后感
  • 原文地址:https://www.cnblogs.com/xinwang/p/4283671.html
Copyright © 2011-2022 走看看