2017-03-29 65 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.