Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[JAVA]Obsługa czytnika smartcard kart chipowych

mateuszkiek 06 Kwi 2009 14:55 4515 1
  • #1 06 Kwi 2009 14:55
    mateuszkiek
    Poziom 15  

    Mam do wykonania projekt na 2 osoby. Autoryzacja z pomocą karty smartcard. Czyi np za pomocą nowej legitymacji studenckiej, karty GSM [SIM). Moja działka to napisać część która Bedzie odpowiedzialna za komunikację z czytnikiem kart. W tym miejscu pojawia się duży problem, mianowicie. jak to zrobić? JAVA działa na wirtualnej maszynie, czy ma dostęp do sprzętu na niskim poziomie? W przypadku języka C / C++ są do tego gotowe metody z WinAPI, ale czy będzie wtenczas działać na Linux'ach? Dość dobre materiały są pod tym linkiem z dobrym opisem PC/SC lecz zwracane wartości to wskaźniki w niektórych przypadkach, w JAVA nie ma wskaźników.
    http://home.elka.pw.edu.pl/~pnazimek/data/doc/ipki.pdf
    Czytnik jaki mam będę miał jest zgodny z PCSC
    Dzięki za pomoc.

    0 1
  • #2 07 Kwi 2009 22:26
    grzegorzsawczak
    Poziom 21  

    W necie znalazłem następujące pozycje oto przykłady nie rozwiązanie:

    Code:
    import java.io.*;
    
    import java.util.*;
    import javax.smartcardio.*;
    import java.util.List;


    public class SmartCardTest00   {

    CardTerminal terminal = null;
    CardChannel channel;

    public static void main(String[] args){
      try {

          // show the list of available terminals
          TerminalFactory factory = TerminalFactory.getDefault();
          List terminalList = factory.terminals().list();

          //List numbers of Card readers
          for (int i=0;  i < terminalList.size(); i++){
            System.out.println("CardReader N?: " + i + " " + terminalList.get(i));
          }

            // take the first terminal in the list
            terminal = (CardTerminal) terminalList.get(0);

          System.out.println("Please insert card...");

          terminal.waitForCardPresent (10000);

          // establish a connection with the card
          Card card = terminal.connect("T=0");
          System.out.println("card: " + card);
          channel = card.getBasicChannel();

          //reset the card
          ATR atr = card.getATR();



         //SEND YOUR APDU COMMANDS HERE....




          card.disconnect(false);
        }
        catch (Exception ex) {
          System.out.println("Exception : " + ex);

        }

    }

    }
    Code:
    hello smart card : 
    
    Code:

    package card.examples.examples;

    import java.util.List;

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

    public class ConnectionTest {

     /**
      * @param args
      */
     public static void main(String[] args) throws Exception{
        System.out.println("Hello World!");
            TerminalFactory factory = TerminalFactory.getDefault();






            List<CardTerminal> terminals = factory.terminals().list();
             System.out.println("Terminals: " + terminals);
             CardTerminal terminal = terminals.get(0);

            //establish a connection with the card , ("T=0", "T=1", or "T=CL"),
             Card card = terminal.connect("*");
            System.out.println("card: " + card);
            CardChannel channel = card.getBasicChannel();

            byte[] bytes = {0x00,0x00,0x00,0x00};
            ResponseAPDU r = channel.transmit(new CommandAPDU(bytes) );

             System.out.println("response: " + r.getBytes().toString() );

             byte b[]=card.getATR().getBytes();

             for(int i=0;i<b.length;i++)
                System.out.print(b[i]);

             //disconnect
             card.disconnect(false);

     }
    }



    zeby odpalic program w javie pod windowsem :
    1. zainstalować Java 6 JDK
    2. w eclipsie zaolzyc nowy projekt java, wkleic kod, ustawic java compiler compliance na 6.0
    3. that's all  zadnych sterow nic wiecej
    ta strona była w archiwum google, ogólnie jest niedostępna.

    Oraz link do dokumentacji:
    http://java.sun.com/javase/6/docs/jre/api/sec...o/spec/javax/smartcardio/package-summary.html

    Mam nadzieje że będą to przydatne informacje również innym.
    Również można skorzystać z:
    JNI czyli java Native interface... względnie Java Card API.

    Powodzenia.

    0