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

  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/xinwang/p/4283671.html
Copyright © 2011-2022 走看看