簡體   English   中英

APDU命令使用Samsung Galaxy S4從Visa Wave NFC簽證中讀取信用卡數據

[英]APDU command to read credit card data from visa Paywave NFC enabled card using Samsung Galaxy S4

  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 s4閱讀VisaPayWave NFC卡詳細信息(持卡人姓名,有效期,卡號等)。 我得到的輸出是[106,-126]。 我認為我使用的APDU命令不正確。 請建議正確的命令。

更改您的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
    };

作為lletami回答,維薩payWave是通常與AID選擇A0000000031010 所以你可以使用APDU

00 A4 04 00 07 A0000000031010 00

選擇payWave應用程序。

在非接觸式EMV支付卡上,您還可以選擇PPSE(鄰近支付系統環境)來檢索可用應用程序列表(及其AID):

00 A4 04 00 0E 325041592E5359532E4444463031 00

選擇EMV支付應用程序只是第一步。 您需要發出幾個其他命令才能獲得可讀的信用卡數據(請參閱此答案 )。

例如,您可以發出GET PROCESSING OPTIONS命令(參見例如這個答案這個答案這個答案 )。

和/或您可以發出READ RECORD命令以從已知的基本文件中獲取數據。 例如

00 B2 01 0C 00

閱讀EF 1的記錄1,

00 B2 02 0C 00

讀取EF 1的記錄2,或

00 B2 01 14 00

閱讀EF 2的記錄1等

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

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

它實際上是6A82 - 它形成了APDU響應碼的SW1和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 Book 1中所述),非常類似於二進制編碼的十進制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM