2014-07-08 99 views
5
byte[] APDUCommand = { 
      (byte) 0x00, // CLA Class   
      (byte) 0xA4, // INS Instruction  
      (byte) 0x04, // P1 Parameter 1 
      (byte) 0x00, // P2 Parameter 2 
      (byte) 0x0A, // Length 
      0x63,0x64,0x63,0x00,0x00,0x00,0x00,0x32,0x32,0x31 // AID 
     }; 


    Intent intent = getIntent(); 
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
    IsoDep iso = IsoDep.get(tag);   
    iso.connect(); 

    byte[] result = iso.transceive(APDUCommand); 

我使用上面的代碼讀取使用三星Galaxy VisaPayWave NFC卡的詳細信息(持卡人姓名,有效期,卡號等) S4。我得到的輸出是[106,-126]。我認爲我使用的APDU命令不正確。請建議正確的命令。APDU命令讀取使用三星Galaxy S4從維薩payWave NFC功能的卡刷卡數據

回答

2

更改APDU命令定義

byte[] APDUCommand = { 
     (byte) 0x00, // CLA Class   
     (byte) 0xA4, // INS Instruction  
     (byte) 0x04, // P1 Parameter 1 
     (byte) 0x00, // P2 Parameter 2 
     (byte) 0x07, // Length 
     (byte) 0xA0,0x00,0x00,0x00,0x03,0x10,0x10 // AID 
    }; 
+0

它不起作用。任何人都可以請建議我做錯了什麼。我是否需要多個APDU命令來讀取所有數據?如果是,請讓我知道算法或代碼。 – user3816152

+0

該命令是第一步。首先,您需要選擇小程序,然後才能讀取數據。 您需要確保小程序已被激活。 – lletami

1

由於lletami回答,維薩payWave是通常與AID A0000000031010選擇。因此,您可以使用APDU

00 A4 04 00 07 A0000000031010 00 

來選擇payWave應用程序。

在非接觸式EMV支付卡,你也可以選擇PPSE(近距離支付系統環境)來獲取可用的應用程序的列表(和它們的艾滋病):

00 A4 04 00 0E 325041592E5359532E4444463031 00 

選擇EMV支付應用僅是第一步。您需要再發出幾條命令才能獲得可讀的信用卡數據(請參閱this answer)。例如,您可以發出GET PROCESSING OPTIONS命令(請參閱,例如this answer,this answerthis answer)。

和/或可以發出讀記錄命令來獲取從已知的基本文件數據。例如。

00 B2 01 0C 00 

讀取記錄1 EF 1,

00 B2 02 0C 00 

讀取EF 1的記錄2,或

00 B2 01 14 00 

讀取EF 2的記錄1,等等

您可以從http://www.emvco.com/獲得支付系統EMV規範,以瞭解可能的命令和數據結構。

0

你的響應代碼[106,-126]的更好表示爲十六進制的,而不是暗示任何符號值。

它實際上是6A82 - 形成SW1和APDU響應代碼的SW2。 6A82對應於「錯誤的參數P1 P2;未找到文件」。有關更多詳細信息,請參閱EMV Book 1。即「0x63,0x64,0x63,0x00,0x00,0x00,0x00,0x32,0x32,0x31」沒有在卡上 - 而是「0xA0,0x00,0x00,0x00,0x03,0x10,0x10」應該是。

由於lletami說,你的APDU命令需要重建,包括使用AID「壓縮的數字」,非常類似二進制編碼的十進制(如EMV書1所述)。