2017-03-29 3 views
-1

J'utilise un lecteur de carte à puce ACR39T-A3 connecté par USB à un appareil Android.APDU Case 2 Réponse trop courte

J'envoie d'abord une commande APDU Case 2 comme ceci.

   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; 

    } 

Je tente d'obtenir un certificat de la carte à puce. Le certificat peut être plus grand que 256 donc j'ai besoin d'envoyer plusieurs. Mais en tant que réponse, je viens d'obtenir 90 00 au lieu du certificat en mulitple.

Quelqu'un peut-il m'aider? Je ne comprends pas comment ça marche avec le décalage.

+0

Merci pour votre réponse. Il a travaillé avec l'incrément de décalage de 255. Merci beaucoup – user2270079

+0

Depuis que cela a fonctionné, j'ai changé mon commentaire à une réponse. – guidot

Répondre

1

Bien que je ne reconnaisse pas votre API (et responseString est un peu trop magique à mon avis), en principe cela devrait fonctionner de cette façon.

Puisque vous spécifiez LE comme 0xFF, je recommande soit

  • pour définir LE à zéro au lieu ou
  • pour incrémenter décalage que par 255.

Si votre EF n'a pas encore été écrit à tout, certaines cartes peuvent ne rien retourner, mais 90 00.