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

Discussione: Message Digest in J2me

  1. #1

    Message Digest in J2me

    Salve a tutti,
    essendo il mio primo post in questo forum vorrei fare i complimenti a tutti in quanto è fantastico.
    Ma bando alle ciancie passo subito al mio problema
    Sto realizzando un applicazione in java per cellulari, ma ovviamente prima la ho realizzata in Java classico(di cui avevo già le conoscenze di base). In Java classico l'applicazione mi è riuscita perfettamente, il problema è nato nel momento in cui ho cercato di effettuare la conversione in j2me.
    Il primo problema è stata la Stringbuilder che comunque ho sostuito con la Stringbuffer che dovrebbe essere uguale.
    Il problema principale è con la messagedigest, vado nel dettaglio:

    digest.update(hexToByte(s));(hexToByte è ovviamente creata da me)
    byte messageDigest[] = digest.digest();
    Questa è la parte di codice incriminata, infatti la update e la digest sono diverse in j2me e richiedono dei parametri aggiuntivi, se io non ho capito male richiedono l'inizio dell'array di byte e la lunghezza, tuttavia non so se è giusto è vorrei qualche consiglio per modificare quelle due istruzioni in j2me...grazie anticipatamente, se può essere utile programmo con Netbeans.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Message Digest in J2me

    Originariamente inviato da SedyBenoitPeace
    Il primo problema è stata la Stringbuilder che comunque ho sostuito con la Stringbuffer che dovrebbe essere uguale.
    StringBuilder è stato introdotto in Java 5, ha la stessa API di StringBuffer ma non è thread-safe (mentre invece StringBuffer è synchronized, quindi thread-safe).

    Originariamente inviato da SedyBenoitPeace
    Il problema principale è con la messagedigest, vado nel dettaglio:

    digest.update(hexToByte(s));(hexToByte è ovviamente creata da me)
    byte messageDigest[] = digest.digest();
    Questa è la parte di codice incriminata, infatti la update e la digest sono diverse in j2me e richiedono dei parametri aggiuntivi, se io non ho capito male richiedono l'inizio dell'array di byte e la lunghezza, tuttavia non so se è giusto è vorrei qualche consiglio per modificare quelle due istruzioni in j2me...grazie anticipatamente, se può essere utile programmo con Netbeans.
    Faccio una premessa: non programmo con Java ME (a parte aver letto qualcosa e fatto qualche prova in passato).

    La security in Java ME fa parte di un package "opzionale" (lo puoi vedere bene qui). Questo vuol dire che se sei indirizzato verso la configurazione CLDC (per i cellulari), non è detto che puoi usarla sempre.
    Da quello che vedo il package della security c'è di certo nel Foundation Profile per la configurazione CDC, che però è orientata ai dispositivi più sofisticati come PDA high-end, set-top boxes e simili (ma non per i cellulari).

    Comunque guardando i due javadoc, quello di Java SE e quello del Foundation Profile di Java ME, non vedo grosse differenze tra i due java.security.MessageDigest.
    Una differenza che vedo è che in Java SE c'è il update(ByteBuffer) (ma perché in Java SE c'è tutto il discorso di Java NIO).
    Per il resto i due MessageDigest sono usabili allo stesso modo e con lo stesso approccio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Allora ti ringrazio per la risposta, comunque ho fatto anche io qualche ricerca ed ecco cosa ho ottenuto.
    Nel Java SE l'update è disponibile in 4 varianti, una utilizzabile solo con un byte, una solo con un bytebuffer ed una solo con un array di byte.
    La quarta è quella in comune con il j2me e richiede come argomenti:
    input - the array of bytes. offset - the offset to start from in the array of bytes. len - the number of bytes to use, starting at offset, io ho capito così, per input intende l'array di bytes, per offset intende l'indice di partenza dell'array da trattare e per len il numero di bytes da utilizzare(con la traduzione è facile arrivarci).

    Nel programma in Java SE io utilizzo quella che tratta un array di byte, ma essendo che nel j2me c'è solo la quarta variante come faccio ad utilizzarla?

    Per quanto riguarda la digest, in Java SE ci sono tre varianti, la prima è una void che non richiede argomenti, la seconda richiede un array di Bytes.

    La terza che è in comune con il J2ME richiede buf - output buffer for the computed digest offset - offset into the output buffer to begin storing the digest len - number of bytes within buf allotted for the digest. Ed è qui che ho i principali problemi perchè non riesco a tramutare il problema per trattarlo in un altro modo.

    Poi leggendo le descrizioni delle funzioni, in particolare quelle in comune, non svolgono lo stesso compito che svolgono in Java SE, è un giorno che mi sto scervellando e non riesco ad arrivare alla soluzione! Forse devo importarle in altro modo?

    Grazie ancora per l'aiuto!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da SedyBenoitPeace
    ma essendo che nel j2me c'è solo la quarta variante come faccio ad utilizzarla?

    Poi leggendo le descrizioni delle funzioni, in particolare quelle in comune, non svolgono lo stesso compito che svolgono in Java SE
    Scusa ma tu che cosa stai usando di preciso e su quale javadoc stai guardando?

    Io per il Foundation Profile sto guardando:
    http://java.sun.com/javame/reference/apis/jsr219

    In Java SE e in Java ME (Security JSR 219) i MessageDigest hanno 3 update che corrispondono:

    void update(byte input)
    void update(byte[] input)
    void update(byte[] input, int offset, int len)

    Poi in Java SE c'è:
    void update(ByteBuffer input)

    ma ripeto che è perché in Java SE c'è anche il NIO.

    Per il resto i 3 update comuni sono usabili e si comportano allo stesso modo (non vedo alcuna evidenza o nota che possa indicare il contrario).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Io sto utilizzando Netbeans IDE! Infatti guardavo li le funzioni disponibili, ora che mi fai notare comunque in quello che mi hai fatto vedere tu ci sono le funzioni che mi servono!
    Possibile che sia un problema della SDK Nokia?(Che io utilizzo).
    Oppure sbaglio ad importare? Io inserisco import java.security.MessageDigest;
    Forse c'è un problema a livello di classi?
    Sinceramente non so dove possa essere il problema sul fatto che non mi mostra tutte le opzioni disponibili..

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da SedyBenoitPeace
    Possibile che sia un problema della SDK Nokia?(Che io utilizzo).
    Purtroppo non lo conosco. Per curiosità ho cercato sul sito Nokia. Sono partito da qui e arrivato qui ma non vedo traccia della JSR 219 (la Security appunto).

    EDIT: alt, dall'ultimo link vedo la (JSR-177) Security and Trust Services API 1.0. In effetti vedo che ha la java.security.MessageDigest ma è super-misera, ha solo 1 digest e 1 update.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ho controllato...è un problema dell'SDK Nokia che consente soltanto l'utilizzo delle funzioni che io ho chiamato in "comune" qualche post fa! http://library.developer.nokia.com/t...e-summary.html

    Uff...adesso come faccio? Quei due passaggi sono fondamentali per lo svolgimento del programma! Secondo te ci sono alternative?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Devi valutare tu cosa usare e se intendi usare una API di quelle ufficiali, se sono opzionali devi assicurarti che siano appropriate per il/i modello/i di cellulare/i che possiedi o intendi trattare in generale. Purtroppo Java ME è molto "frammentato" da questo punto di vista. Non basta dire: ah, il mio SDK sul PC offre la API JSR xxx o la yyy ... devono poi essere implementate sui cellulari!

    In alternativa puoi usare librerie esterne di crittografia/message digest. Come la Bouncy Castle che mi pare abbia qualcosa anche per Java ME.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Per il programma che ho in mente non credo di dover utilizzare delle API specifiche(data anche la relativa pochezza in questo campo...trattano meglio il Symbian C++ in quanto linguaggio nativo o le QT perchè Nokia ha investito in esso).
    Comunque ti spiego la parte di programma magari puoi aiutarmi a trovare un'alternativa:
    public static String hash(String s, String algo) {
    try {
    // Create MD5 Hash
    MessageDigest digest = java.security.MessageDigest
    .getInstance(algo);
    // convert to bytes
    digest.update(hexToByte(s));
    byte messageDigest[] = digest.digest();
    // Create Hex String
    StringBuffer hexString = new StringBuffer();
    for (int i = 0; i < messageDigest.length; i++) {
    String h = Integer.toHexString(0xFF & messageDigest[i]);
    while (h.length() < 2)
    h = "0" + h;
    hexString.append(h);
    }
    return hexString.toString();
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    }
    return "";
    }
    Allora in sintesi questa funzione prende una stringa e la cripta sfruttando l'algoritmo sha256(anche se può essere utilizzata con altri algoritmi.
    Come puoi vedere il problema sta semplicemente in quelle due righe in quanto non c'è molto da scoinvolgere...è che al momento ho la testa talmente fusa da non riuscire a ragionare...tu sapresti farle in qualche altro modo?
    Detto questo anche se non ci riuscirai ti ringrazio per essermi stato dietro

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da SedyBenoitPeace
    Allora in sintesi questa funzione prende una stringa e la cripta sfruttando l'algoritmo sha256
    Qui parli di SHA-256, nel pezzo di codice sopra di MD5. Scegli quello che vuoi .... purché sei sicuro che sia supportato!

    Originariamente inviato da SedyBenoitPeace
    digest.update(hexToByte(s));
    byte messageDigest[] = digest.digest();

    Come puoi vedere il problema sta semplicemente in quelle due righe
    Le soluzioni sono diverse ma devi scegliere e valutare tu, in base a quello che puoi usare per il/i cellulare/i che intendi trattare. Questo lo devi sapere tu, non lo posso sapere io o altri ....

    1)
    Se puoi usare la JSR-177 il MessageDigest offerto ha solo (oltre a getInstance/reset):

    int digest(byte[] buf, int offset, int len)
    void update(byte[] input, int offset, int len)

    Il digest sopra riceve un buffer che è quello di output per depositare il digest. Quindi devi semplicemente cambiare l'approccio nel prendere il digest. Nulla di sconvolgente.
    Per il update idem nulla di chissà cosa, invece di passare solo un byte[] passi anche un offset (0) e la lunghezza (tuoarray.length).

    2)
    Se puoi usare la JSR-219 il MessageDigest offerto è praticamente quasi come quello presente in Java SE (a parte la ovvia/evidente mancanza di update(ByteBuffer) che comunque non ti interessa)

    3)
    Se non puoi/vuoi usare le soluzioni 1 e 2 ... devi usare una libreria esterna. C'è la Bouncy Castle che ha anche la versione per Java ME (sicuramente più ridotta rispetto a quella per Java SE). Oppure trovare altro in rete.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.