2014-03-12 45 views
0

我正在構建android應用程序,它連接到nfc安全元素並獲取數據給android device.for構建安全元素,我使用了java卡API。在jcop工具中發送ATR命令來重置java卡。這是發送命令。如何發送ATR命令來重置使用android的nfc安全元素?

/card -a a000000003000000 -c com.ibm.jc.CardManager 
resetCard with timeout: 0 (ms) 
--Waiting for card... 
ATR=3B F8 18 00 FF 81 31 FE 45 4A 43 4F 50 76 32 34 ;.....1.EJCOPv24 
    31 43            1C 
ATR: T=1, FI=1/DI=8 (31clk/etu), N=-1, IFSC=254, BWI=4/CWI=5, Hist="JCOPv241" 
=> 00 A4 04 00 08 A0 00 00 00 03 00 00 00 00 

我使用JCOP工具that.Secure元素部分complete.but我的Android應用程序需要發送多個請求在一個second.I用於創建一個標籤,併發送數據,這種方式安全元件。

byte[] GET_STRING = { 
     (byte) 0x80, // CLA Class   
     0x04, // INS Instruction 
     0x00, // P1 Parameter 1 
     0x00, // P2 Parameter 2 
     0x10 // LE maximal number of bytes expected in result 
    }; 

result = tag.transceive(GET_STRING); 
int len = result.length; 
if (!(result[len-2]==(byte)0x90&&result[len-1]==(byte) 0x00)) 
    throw new RuntimeException("could not retrieve msisdn"); 

byte[] data = new byte[len-2]; 
System.arraycopy(result, 0, data, 0, len-2); 
String str = new String(data).trim(); 

tag.close() 

但我需要知道如何使用android isoDep連接發送ATR命令。如果不可能在獲取數據後重置java卡。

感謝 Sajith

+0

您正在討論通過NFC接口發送命令給**外部**非接觸式智能卡(以及**不**關於將命令發送到直接連接到移動設備的*安全元件),對? –

+0

yes.simply我需要重置NFC連接。 – Sajithv

回答

1

關於你提到的術語:

在非接觸式接口,你的卡上沒有產生一個ATR復位序列。但是,非接觸式接口有兩個類似的事件。一個是關閉HF場。這會導致斷電並因此造成卡的硬重置。第二種是將非接觸式卡置於HALT狀態,並通過ISO/IEC 14443-3規定的激活選擇程序重新激活卡。這通常也會導致卡重置其內部狀態。

關於你如何重置通過Android的IsoDep連接非接觸式卡的問題:

  • 硬復位:這是唯一可能通過把存儲卡從NFC設備的讀取範圍和然後再次掃描它。

  • 「軟復位」:

    IsoDep isoDepTag = IsoDep.get(tag); 
    
    [...] 
    
    isoDepTag.close(); 
    isoDepTag.connect(); 
    
    [...] 
    

    但是,你應該阿瓦雷某些設備(如:在大多數設備應通過關閉和重新打開使用IsoDep實例的連接成爲可能Galaxy S4與某些Android版本結合使用)將無法正常執行軟重置(HALT +重新激活/選擇),而是繼續之前的連接。