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 .
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 .