2014-03-25 243 views
3

我試圖寫一個Android應用程序進行讀/寫的NFC卡,支持ISO 14443 A類標準。徹底搜索後,似乎我現在唯一的選擇是通過發送APDU命令來使用IsoDep類及其收發方法。我擁有的卡是支持ISO 14443和ISO 7816標準的SmartCafe雙接口卡。ISO 14443 A類卡讀取/寫入採用Android

然後我說找的APDU爲14443標準。我發現this page有關於此的一個很好的資源。但是,問題是缺乏任何示例APDU。

有些情況下,我沒有運氣嘗試了幾個計算器的問題和答案與APDU協同(例如this)。

蠻力嘗試通過選擇命令顯示以下結果:6F108408A000000003000000A5049F6501FF9000它看起來像卡的文件控制信息。但我在如何解讀這些信息上掙扎着。

我也隨大流掙扎與卡工作。到目前爲止,我已經明白:

  1. 我需要選擇一個文件,並
  2. 然後從文件中讀取或寫入到文件中。

該卡是一個新卡,可能沒有任何其他文件或信息,而不是文件控制信息。那麼哪個PDU可用於在特定位置創建文件,以及哪個PDU可用於從該文件中讀取?

回答

7

您使用的卡(SmartCafe雙接口)是JavaCard。

你試圖SELECT命令一定是這樣的:

 
00 A4 04 00 00 

 
00 A4 04 00 08 A000000003000000 00 

你在響應該SELECT命令看到的是全球平臺卡管理的FCI:

 
6F 10 (FCI template) 
    84 08 (Application DF name) 
    A000000003000000 
    A5 04 (Proprietary data) 
    9F65 01 (Maximum length of data field in command message) 
     FF (256) 
9000 (status=no error) 

與該類型的卡,文件的概念並不真正存在默認(S o只是選擇一個文件,讀/寫它通常不會正常工作)。相反,此卡包含基於Java的應用程序,您可以使用APDU命令進行交互。

所以典型的流與應用進行交互將是:

  1. 選擇根據它的AID(應用標識符)的應用程序。根據ISO 7816-4,AID可以看作是一個DF名稱,您可以爲該特定DF名稱發出SELECT命令。

  2. 發送任意的APDU(根據ISO 7816-4,與幀間行業或專有編碼)到所選擇的應用程序。

  3. 基於Java的(實際上基於JavaCard的,其中JavaCard是Java語言的擴展子集)應用程序接收該命令,解碼並處理它並生成響應。

  4. 該卡片將應用程序的響應發回給閱讀器。

現在有幾個possiblities:

  1. 該卡是預prorgammed,爲特定目的而不必訪問卡管理的關鍵。
    在這種情況下,您需要知道如何連接卡上的應用程序。理想情況下,應用程序文檔將顯示您需要選擇的AID以及您可以發送的命令。

  2. 該卡已預先編程爲特定用途,但您有鑰匙訪問卡管理器 - 當然,您不想使用預編程的應用程序,但要使用你自己的應用程序(否則與1相同)。
    在這種情況下,您可以創建自己的JavaCard應用程序(或使用適合您的目的的現成應用程序)並將其安裝到卡上(例如使用開放工具,如GPShell)。然後,您可以使用您自己定義的界面訪問該卡。

  3. 該卡是預編程的特定目的和你具有訪問卡管理的關鍵。
    在這種情況下,你唯一的選擇是創建自己的應用程序,如2

+1

優秀的,這是我需要知道到底是什麼。網上提供的任何教程都不像您對FCI的回答那麼具體。而且,GPShell將派上用場。非常感謝。 – Ripul

+1

優秀的答案,對初學者非常有幫助!謝了哥們! –