2015-04-18 58 views
0

的數據有效載荷我有一些卡其使用NFC(例如,學生ID卡或借記卡)。這些卡不使用NDEF存儲數據。我怎樣才能獲得這些卡的有效載荷?得到一個標籤

目前,我用這個代碼:

if (intent.getAction() != null && NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) 
{ 
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
} 

誰能發現我怎麼能得到標籤的有效載荷?

該卡的技術是android.nfc.tech.IsoDepandroid.nfc.tech.NfcA。通過發送APDU的,因爲這

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
NfcA nfcA = NfcA.get(tag); 

後,您可以用標籤進行通信:

+0

這取決於卡的技術,卡的類型(內存,javacard),數據如何存儲,...沒有通用的方法從借記卡和學生證獲取數據。 – LaurentY

+0

該卡的技術是android.nfc.tech.IsoDep,android.nfc.tech.NfcA。 –

回答

0

你可以得到NfcA對象,因爲這

byte[] apdu = [...]; 
byte response = nfcA.transceive(apdu); 
1

獲取有效載荷從非NDEF標籤/智能卡在很大程度上取決於您使用的標籤類型。標籤/智能卡的範圍可以從使用平面,線性存儲器結構,並且使用文件系統爲基礎的存儲器結構的數據存儲裝置,一個包含可執行程序代碼和數據處理器智能卡是簡單的數據存儲裝置。

在你的情況下,標籤是基於NFCA + IsoDep技術(即,它實現的傳輸協議,如ISO/IEC 14443-4類型A標準化的)。因此,您的標籤不太可能屬於一組簡單的線性可尋址內存標籤。相反,更有可能(雖然不一定是真的)您的標記實現了一些通信協議,並且可能還有一些像ISO/IEC 7816-4中標準化的文件系統結構。

不管怎麼說,你需要找出/認識和執行代碼中,以從中獲取任何數據說話的協議。如果您的「標籤」是支付卡,則可能會在EMV Contactless Specifications for Payment Systems中指定。如果您的標籤是護照,則在ICAO 9303中指定。

  • 如果標籤是與平面內存佈局的存儲器標籤,這將典型地具有取地址偏移和長度爲參數簡單的讀命令。另外,可能存在訪問控制機制,要求您提供密鑰/密碼知識證明。

  • 如果您的標記是具有基於文件系統的內存佈局的內存標記,則它通常會具有用於選擇和訪問文件的命令。這可能基於ISO/IEC 7816-4。另外,可能存在訪問控制機制,要求您提供密鑰/密碼知識證明。

  • 如果你的標籤是處理器智能卡,你通常不能只讀取整個數據存儲器。在卡上執行的程序代碼將決定在哪些條件下可以訪問哪些信息。例如,私鑰通常被設計成它們可以從永遠不會離開該卡。例如。 EMV支付卡屬於這一類。