LETTURA SMART CARD

FAQ di Java

LETTURA SMART CARD

Messaggioda ilDodo » mar apr 29, 2014 10:01 am

Ciao a tutti sono nuovissimo di questo forum e spero che qualcuno possa darmi una mano !
Per motivi di lavoro mi sono trovato a dover utilizzare un dispositivo per la firma digitale per l'esattezza un "ELCOM Secure Sign" al cui interno è presente un lettore di Smart card OMNIKEY CardMan 3x21 ...
Detto ciò , dovrei scrivere un programmino in JAVA che mi restituisca piu dati possibili dalle diverse smartcard in circolazione (logicamente solo quelli fruibili non i dat protetti come date , codici di sicurezza etcc ) per esempio il PAN di una carta di credito o il codice fiscale di una CRS.
Sto chiedendo aiuto perchè sto incontrando serie difficoltà nell inviare le (da me odiate) APDU alle smart card per poter ottenere i dati che mi servono .
Al momento posto una parte di codice che mi serve per collegarmi al lettore e vedere se la carta inserita è presente ...
... sono bloccato , in crisi , non trovo documentazione e ho gia consultato centinaia di siti,forum,libri relative alle smart card alla loro programmazione .
Codice: Seleziona tutto
import java.util.List;

import javax.smartcardio.Card;
import javax.smartcardio.CardChannel;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU;
import javax.smartcardio.TerminalFactory;



public class Prova {

   public static void main(String [] args) throws CardException
   {
    // stampo lista lettori
    TerminalFactory factory = TerminalFactory.getDefault();
    List<CardTerminal> terminals = factory.terminals().list();
    System.out.println("Terminals: " + terminals);
   
    // prendo il primo lettore
    CardTerminal terminal = terminals.get(0);
   
    //stabilisco connessioen con la carta
    Card card = terminal.connect("T=1"); //T1 per CRS -- dovrò implementare anche il T0 per le altre carte
    System.out.println("card: " + card);
    CardChannel channel = card.getBasicChannel();
   
    /*CommandAPDU(byte[] apdu)
   Constructs a CommandAPDU from a byte array containing the complete APDU contents (header and body).
   farò cosi
     */
   

    //cosi ho selezionato la MF
    ResponseAPDU r = channel.transmit(new CommandAPDU((byte)0x00,(byte)0xA4,(byte)0x00,(byte)0x00,(byte)0x3F));
    System.out.println(r);
    // disconnect
    card.disconnect(false);
   }
}

Spero che qualcuno mi posso aiutare . :roll: :cry: :shock:
ilDodo
 
Messaggi: 2
Iscritto il: mar apr 29, 2014 9:41 am

Re: LETTURA SMART CARD

Messaggioda ilDodo » mar apr 29, 2014 2:27 pm

Aggiungo una parte di codice che mi permette di ricavare l'ATR di una qualsiasi smart card ma sono allo stesso punto non so come utilizzare le APDu tramite il CommandAPDU help me!!!
Codice: Seleziona tutto
import java.util.List;

import javax.smartcardio.ATR;
import javax.smartcardio.Card;
import javax.smartcardio.CardChannel;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU;
import javax.smartcardio.TerminalFactory;



public class LetturaSmartCard {

   public static void main(String [] args) throws CardException
   {
   
    // stampo lista lettori
    TerminalFactory factory = TerminalFactory.getDefault();
    List<CardTerminal> terminals = factory.terminals().list();
    System.out.println("Lista lettori smart card collegati: " + terminals);
   
    // prendo il primo lettore
    CardTerminal terminal = terminals.get(0);
   
    System.out.println("Lettore utilizzato: " + terminal);
    //stabilisco connessione con la carta
   
    Card card = terminal.connect("*");
    // System.out.println(card.getProtocol());
    System.out.println("\n\nCarta inserita: " + card);
    CardChannel channel = card.getBasicChannel();


 
    ATR atr = card.getATR();
    byte[] ATR = atr.getBytes();
    System.out.println("ATR della carta: "+LetturaSmartCard.bytesToHex(ATR));
   
   
   
   
    // disconnect
    card.disconnect(false);
   
   


   }
    public static String bytesToHex (byte[] bytes) {
           StringBuilder sb = new StringBuilder(bytes.length * 2);
           for (int i=0; i< bytes.length; i++) {
               sb.append(String.format("%02x", bytes[i]));
           }
                  
           return sb.toString();
       }
   
}


Aspetto notizie :cry:
ilDodo
 
Messaggi: 2
Iscritto il: mar apr 29, 2014 9:41 am

Re: LETTURA SMART CARD

Messaggioda alesslud » mar apr 29, 2014 3:47 pm

Guarda sinceramente non mi occupo del settore che tu hai indicato e non saprei come aiutarti. Vedrò se posso darti una mano la prossima settimana.......
alesslud
Site Admin
 
Messaggi: 779
Iscritto il: mer nov 08, 2006 8:09 am


Torna a Java

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron