2017-03-29 10 views
-1

USB를 통해 Android 장치에 연결된 ACR39T-A3 스마트 카드 판독기를 사용하고 있습니다.APDU 사례 2 응답이 너무 짧습니다.

먼저 APDU 사례 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은 다소 마술처럼 내 의견으로 채워집니다.) 원칙적으로 그렇게 작동해야합니다. 당신은 0xFF로 LE를 지정 이후 EF가 아직 작성되지 않은 경우

, 내가 하나가

  • 대신 제로로 LE를 설정하거나
  • 255

만 오프셋 증가시키는 것이 좋습니다 어떤 카드는 아무것도 반환하지 않을 수도 있습니다. 90 00.