2017-03-29 67 views
-1

我正在使用通過USB連接到Android設備的ACR39T-A3智能卡讀卡器。APDU案例2響應太短

首先我發送這樣的APDU Case 2命令。

   int offset = 0; 
       List<byte[]> dataList = new ArrayList<>(8); 

      while (true) { 



        if (!responseString.contains("90 00")) { 
         break; 
        } 


        dataList.add(progress[0].response); 




    int offsetStartInt = 0x7F & (offset >> 8); 
    int offsetEndInt = offset & 0xFF ; 

    //SmartcardOS 
    //T1 
    byte[] apdu = new byte[]{ 
      (byte) 0x00, //CLA 
      (byte) 0xB0, //INS 
      (byte) offsetStartInt, //P1 
      (byte) offsetEndInt, //P2 
      (byte) 0xff, //LE 

    }; 

    transmitApdu(apdu); 
    offset += 256; 

    } 

我試圖從智能卡獲取證書。 證書可以大於256,所以我需要發送多個。 但作爲響應,我只是得到90 00而不是多個證書。

任何人都可以幫助我嗎?我不明白它是如何與抵消工作。

+0

感謝您的回覆。它的偏移量增加了255倍。非常感謝 – user2270079

+0

因爲它的工作原理,我改變了我的評論到一個答案。 – guidot

回答

1

儘管我不認可你的API(並且responseString在我看來有些太神奇了),但原則上它應該以這種方式工作。

既然你指定LE爲0xFF的,我建議,要麼

  • 設置LE,而不是零或
  • 遞增255。

僅偏移如果你的EF還沒有寫到目前爲止,有些卡可能只會返回90 00.