上一篇簡單的了解了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