Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: JAVA CARD e smart card

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    8

    JAVA CARD e smart card AIUTO URGENTE

    Salve a tutti sono uno studente di ing elettronica e sto sviluppando un lavoro di tesi che prevede l'utilizzo di smart card. Per programmare la card sto utilizzando javacard e come ambiente di lavoro Eclipse. Ho creato un programma che scrive bit sulla carta e poi li legge, l'ho testato tramite la card virtuale JCWDE e ora non so come fare a passarlo sulla carta fisica esterna. Sto utilizzano un CAD HOMNYKEY 3121. Ho letto che bisogna creare un file .CAP tramite il tool "CONVERT" ma non riesco ad ottenere il file . Si genera sempre il seguente errore:


    Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.


    conversion completed with 1 errors and 0 warnings.
    error: dati.Write_Read_Data: unsupported class file format of version 50.0.


    AIUTATEMI PER FAVORE GRAZIE IN ANTICIPO.
    PS(1): E' LA PRIMA VOLTA CHE PROGRAMMO
    PS(2):sto utilizzando jck 2.2.2 e jcde0.1
    LUC@

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non è un errore java, è un'operazione che non ti è permesso fare con l'attuale licenza di cui disponi
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    8
    scusami ma non sono pratico di java potresti spiegarmi meglio???? devo scaricare un'altra versione di javacard o di eclipse???? GRAZIE
    LUC@

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ho corretto il titolo della discussione, solo per precisare che, come specificato anche nel Regolamento interno, nessuna discussione è urgente, essendo questo un forum e non un servizio di assistenza.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Eclipse è solo l'ambiente di sviluppo che non crea di questi problemi (non sto a sciorinare qui i termini di licenza di eclipse).
    Puoi avere problemi legati alla libreria che usi (che libreria e che versione usi?), dovresti quindi rivolgerti ai produttori della libreria, essendo un problema loro specifico
    RTFM Read That F*** Manual!!!

  6. #6
    Ho speso i soliti 20 secondi con Google...
    Il problema è che devi compilare con una versione di java più vecchia, perlomeno una 1.5
    ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    8
    grazie mille!!!!!! proverò ad installare una versione precedente!!!!!
    LUC@

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    8
    Ho cambiato il java compiler nella versione 1.5 ed ora mi da la possibilità di effettuare la conversione ma mi da quest'errore:

    Java Card 2.2.2 Class File Converter, Version 1.3
    Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.


    conversion completed with 1 errors and 0 warnings.
    error: line 77: dati.Write_Read_Data: unsupported int type of intermediate value, must cast intermediate value to type short or byte.

    Il codice che ho scritto è il seguente:


    package dati;

    import javacard.framework.*;


    public class Write_Read_Data extends Applet {
    final byte AppletCLA = (byte) 0xb0; //imposta il CLA della mia applet
    /*metodi di INS*/
    final byte GET_DATA = (byte) 0x10;
    final byte WRITE = (byte) 0x20;


    /*variabile per i metodi */
    final byte[] archivio;


    /*METODO INSTALL*/

    public static void install(byte bArray[], short bOffset, byte bLength)
    throws ISOException {
    new Write_Read_Data();//viene invocato il costruttore

    }

    /*COSTRUTTORE*/
    protected Write_Read_Data() { //all'interno si inizzializzano le variabili di classe
    archivio = new byte[(short)5];
    register(); //serve per registrare l’applet nella JCVM e deve essere invocato in ogni classe nel costruttore.
    }

    /*METODO PROCESS*/

    public void process(APDU apdu) throws ISOException { //si elaborano le APDU ricevute e si gestiscono i metodi implementati
    byte buffer[] = apdu.getBuffer(); //estraggo informazioni dal buffer(l'istruzione letta nel buffer passa il controllo alla routine opportuna)
    if ((buffer[ISO7816.OFFSET_CLA] == 0) && //escludo il caso in cui il comando è SELECT
    (buffer[ISO7816.OFFSET_INS] == (byte)0xA4))
    return;
    /* esiste la possibilità che venga inviata all’applet un’istruzione non supportata,
    e ci si aspetta che ritorni un messaggio di eccezione che spieghi il tipo di errore. */
    if (buffer[ISO7816.OFFSET_CLA] != AppletCLA){
    ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED) ;
    }
    /*Si deve quindi effettuare un controllo del campo INS per determinare quale metodo usare
    e anche per verificare se ciò che c’è nel campo INS sia supportato.*/


    if (buffer[ISO7816.OFFSET_CLA] == AppletCLA) {
    switch(buffer[ISO7816.OFFSET_INS]) {
    case GET_DATA:
    getData(apdu);
    return;

    case WRITE:
    write(apdu);
    return;
    default :
    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED) ;
    }
    }
    }


    public void write(APDU apdu){

    byte buffer[] = apdu.getBuffer(); //memorizzo il buffer
    short lc = buffer [ISO7816.OFFSET_LC]; //memorizzo la lunghezza dei dati specificata nel campo LC

    if(lc!=apdu.setIncomingAndReceive()) //se la lunghezza dichiarata è diversa da quella effettiva: ERRORE
    ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    else{ //memorizziamo il punto del buffer in cui inizia il campo DATA

    short campoData = ISO7816.OFFSET_CDATA;

    short puntatore = (short) //utilizziamo un puntatore per la memorizzazione inviato tramite P1 P2
    (buffer[ISO7816.OFFSET_P1]*buffer[ISO7816.OFFSET_P2]);

    if(puntatore>=archivio.length&&puntatore+lc>=archi vio.length) //elimino la possibilità di errori di puntamento
    ISOException.throwIt(ISO7816.SW_WRONG_P1P2);
    else
    Util.arrayCopy(buffer, campoData,archivio, puntatore, lc); //copio il buffer da campoData per la lunghezza lc in archivio
    }

    }


    public void getData(APDU apdu){
    //imposto il CAD a ricevere
    apdu.setOutgoing();
    //invio al CAD la lunghezza dell'arrey
    apdu.setOutgoingLength((byte)archivio.length);
    //invio i dati
    apdu.sendBytesLong(archivio,(byte)0,(byte)archivio .length); //dal byte 0 fino alla lunghezza di tutto il codiceCarta

    }
    }



    IN ROSSO LA RIGA DOVE TROVA L'ERRORE....AVETE QUALCHE CONSIGLIO????? GRAZIE
    LUC@

  9. #9
    Credo che tu debba fare un cast su archivio.length.
    Tuttavia visto che lo istanzi in questo modo:
    codice:
    archivio = new byte[(short)5];
    io considererei di operare in questo modo:

    codice:
    public class Write_Read_Data extends Applet {
    final const short DIM_ARCHIVIO = 5;
    ...
    archivio = new byte[DIM_ARCHIVIO];
    ...
    if((puntatore>=DIM_ARCHIVIO)&&((puntatore+lc)>=DIM_ARCHIVIO))
    
    etc. etc.
    ...

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    8
    innanzitutto grazie per la risposta!!!!! ho modificato il codice come da te suggeritomi ma
    quando vado ad utilizzare il tool convert mi ritrova l'identico errore di prima. In più quando scrivo:

    final const short DIM_ARCHIVIO = 5;

    mi da : errore di sintassi su "const"; quindi ho cercato di convertire senza const!!!!!

    Grazie per l'aiuto ma da solo non saprei dove mettere le mani!!!!!!
    LUCA
    LUC@

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.