2013-06-25 109 views
3

我們正在讀簽證卡信息從APDU命令,這裏要說的是,我們在這個時候發送持卡人在APDU名稱命令(ICC卡)

1. 00A404000E315041592E5359532E444446303100 
2. 00B2010C00 

命令序列,我們知道我們可以把處理命令爲 80A80000048302084000但它會給我們一個錯誤,因此我們跳過了這個命令併發送了READ SFI 1記錄。

00B2010C00 

有了這個,我們可以得到卡號和過期日期,但是我們拿不到持卡人的名字。所以如果有人知道發生了什麼,請幫助我們。

回答

5

讀取芯片卡上的名稱和其他信息&引腳卡並不像您想象的那麼簡單。

它不像一個簡單的APDU那麼簡單,還有幾個步驟需要先完成。

首先您需要執行應用程序選擇。

你如何做到這一點,取決於你的卡和你的終端。

有2種標準方法。

  • 1)申請文件選擇
  • 2)AID掃描

對於1型,您通常使用選擇文件APDU

(注調用已知的文件名:我我不打算在這裏輸入完整的apdu句子,因爲有太多的數據可以嘗試和表示,如果對這篇文章有足夠的關注,那麼我可能會做一個博客文章)

用於非接觸卡的大多數EMV標準卡的文件名是'1PAY.SYS.DDF01'或'2PAY.SYS.DDF01'。

第二種方法涉及保留一個AID(應用程序標識符)列表,然後依次嘗試讀取,直到您獲得一個或多個肯定結果爲止。艾滋病是那些看起來像這樣的數字:

A00000002501 
A0000000031010 
A0000000041010 

3以上是「美國運通卡」,「簽證」和萬事達卡部分匹配和所有的信用卡。

信用卡/借記卡/忠誠度都有自己的艾滋病和有可用的非官方列表左右浮動淨,但一般要得到你需要掏出一些現金和接近金融服務的全球權威買它的最終名單。

一旦您執行了應用程序選擇並從中獲取了數據,告訴您卡上有什麼,然後您需要使用返回的內容來讀取卡片文件標識符。

解碼您獲取的數據並提取SFI(短文件標識符),這會告訴您要讀取的包含實際應用程序列表的文件的短ID。

應用程序列表將是一個條目列表,每個條目跟隨相同的基本BER-TLV(標籤長度值)對象,幷包含首選語言,AID(如AID選擇中所述)和其他一些位。

一旦你有你的應用程序列表,從每個應用程序條目中讀取目錄基本文件,密切關注優先級,優先級會告訴你哪個應用程序結構應該視爲最重要的,例如在我的英國簽證借記我有2個應用程序。

一爲我的銀行自己的專用網絡,另一個用於英國&歐洲的「鏈接」網絡。如果我在我自己的銀行自動取款機用我的卡,然後他們的應用程序的優先級,但如果我在任何其他然後「鏈接」使用優先。

一旦到了這一點,你有一個積極的援助(無論是從應用程序選擇列表,或通過掃描列表有效AID是你的興趣),現在是時候進行「最後的選擇」

您所選擇的AID選擇文件,那麼一旦這樣做了,你需要使用的TLV對象爲選擇返回的數據進行GPO調用(獲取處理選項)

執行此GPO調用,將返回尚未更BER-TLV數據。

使GPO告訴卡你準備好開始一個事務,從GPO調用返回的數據然後用於使用現在可以提取的PDOL數據構建'PDOL'(處理數據對象列表)在AIP和AFL (抱歉不記得那幾件代表什麼:-))這最後給我們的短文件標識符能夠讀取的ADS(應用數據結構)

一旦你的ADS,那麼你不只是持卡人姓名,但PAN,到期日,發行人可自由支配的數據,服務代碼X509公證書和一噸的其他東西。

正如我前面提到的,然而,爲了實際記錄APDU的確切流程和對各種TLV對象進行解碼的分析,我需要使這篇文章長達20頁!

但是,我已經寫了幾段.NET代碼來使用這些東西多年以來,老實說,我一直在寫一篇博客文章超過一年,現在無論如何:-)

+1

AFL是應用文件定位器和AIP是應用交互特徵:-) – ldemay

+0

謝謝:-)這已經有一段時間,因爲我沒有任何APDU水平的工作 – shawty