Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 30
  1. #11
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    A) C'è anche qualche sistema per fare l'encrypt del codice?
    Encrypt/decrypt è possibile ma ovviamente non con gli hash (Lele ti ha già detto che sono unidirezionali). Esistono, in generale, algoritmi di cifratura quali ad esempio AES, Blowfish e altri, utilizzabili (se forniti da un apposito provider) tramite la API della crittografia di Java.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    B) Mi ricordavo però diverse varianti di questo metodo (128bit, 256 bit, ecc...)? Esiste sono una versione di MD5? Sono io che ho un ricordo sbagliato di questo metodo? Esiste solo l'MD5?
    MD5 ha lunghezza fissa di 128 bit. Esistono i più "vecchi" MD2 e MD4 (non ha più senso usarli) e ne esistono di più nuovi/recenti come SHA-1, SHA-256 e svariati altri.
    Vedi qui:
    http://en.wikipedia.org/wiki/Cryptog...ash_algorithms
    dove c'è una bella tabellina.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #12
    Mi piaceva molto il codice di schumy ma non sono riuscito a farlo funzionare così ho provato questo che ho trovato su internet:

    codice:
    package prova;
    
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    class Esempio {
    
        public static String getMD5(String input) {
            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] messageDigest = md.digest(input.getBytes());
                BigInteger number = new BigInteger(1, messageDigest);
                String hashtext = number.toString(16);
                while (hashtext.length() < 32) {
                    hashtext = "0" + hashtext;
                }
                return hashtext;
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            }
         }
    
        public static void main(String[] args) throws NoSuchAlgorithmException {
            System.out.println(getMD5("gianni"));
        }
    }

    che però trovo poco chiaro e anche parecchio complesso.

    http://www.asjava.com/core-java/java-md5-example/

    il codice funziona, l'ho già testato.

    Grazie mille a tutti
    Più pratica in futuro...

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Mi piaceva molto il codice di schumy ma non sono riuscito a farlo funzionare
    Se ti riferisci al codice che lui ha postato nella risposta #6, sappi che quella classe MD5Encrypter non fa parte del framework standard .... è sicuramente di una libreria esterna ma quale non lo so .... dovrei cercare.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    così ho provato questo che ho trovato su internet:
    [...]
    che però trovo poco chiaro e anche parecchio complesso.
    Allora: MessageDigest è la classe nel package della security di Java SE, quindi questa è la API "standard" e basilare che si può usare.
    Tra l'altro l'API della security è basata sul concetto di "provider" ed è "pluggabile", cioè si possono agganciare provider esterni che forniscono i vari servizi di MessageDigest, SecureRandom, Signature, ecc...

    Qualunque altra API o libreria esterna per il message digest può: o basarsi su MessageDigest, incapsulando i dettagli tecnici e fornendo una API semplificata (façade) oppure reimplementare da zero l'algoritmo di digest con la sua propria API.

    Comunque, a parte queste disquisizioni, quel codice che hai postato non è affatto complicato (se ti "preoccupi" per una manciata di righe ..... ). L'unica cosa che mi sembra un pochettino fuori luogo è tirare in ballo BigInteger solo per ottenere la formattazione in esadecimale.
    Si può fare in modi più semplici e pure più leggibili, ad esempio da Java 5 sfruttando la nuova funzionalità di formattazione delle stringhe componendo la stringa con un loop in cui formatti ciascun byte con String.format("%02X", byte_iesimo)
    E questa formattazione da byte[] a String si può anche incapsulare in un metodo apposito, in modo da rendere il tutto ancora più semplice e leggibile!

    La cosa importante però riguarda il charset della sequenza di byte ottenuta dal String. getBytes() usa il charset predefinito della piattaforma, che può variare appunto da un S.O. all'altro. In questi casi bisogna sempre imporre un charset valido e ben preciso, in modo che tutto quanto sia "stabile" e indipendente dalla piattaforma. Quindi es. getBytes("UTF-8") .
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    Quindi tu riscriveresti il codice in questo modo?

    codice:
    public static String OttieniMD5(String input) throws UnsupportedEncodingException {
            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] messageDigest = md.digest(input.getBytes("UTF-8"));
                BigInteger number = new BigInteger(1, messageDigest);
                String hashtext = number.toString(16);
                while (hashtext.length() < 32) {
                    hashtext = "0" + hashtext;
                }
                return hashtext;
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            }
        }
    Altra domanda: in questo tuo metodo perché usi US-ASCII? a tuo avviso conviene mettere UTF-8 anche qui sotto?

    codice:
        private String OttieniPasswordSito() throws IOException {
    
            URL url = new URL(urlfile);
            URLConnection urlconn = url.openConnection();
            InputStream is = urlconn.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "US-ASCII");
            BufferedReader br = new BufferedReader(isr);
            try {
                return br.readLine();
            } finally {
                br.close();
            }
        }
    Più pratica in futuro...

  5. #15
    Si infatti la mia MD5Encrypter è la seguente

    public class MD5Encrypter {

    codice:
    public MD5Encrypter(){
    
            
        }
        
        
        public String encrypt(String inputPsw) {
            String outputPsw="";
            try{
                MessageDigest m = MessageDigest.getInstance("MD5");
                m.update(inputPsw.getBytes());
                outputPsw= String.format("%032x",new BigInteger(1,m.digest()));
            }
            catch(Exception e){
                e.printStackTrace();
            }
            return outputPsw;
        }
    Ultima modifica di schumy2000; 24-01-2014 a 10:28
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  6. #16
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Quindi tu riscriveresti il codice in questo modo?

    codice:
    public static String OttieniMD5(String input) throws UnsupportedEncodingException {
            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] messageDigest = md.digest(input.getBytes("UTF-8"));
    Questo sì, con solo una piccola nota: UTF-8, da specifiche Java, è sicuramente supportato. Catturerei lì dentro UnsupportedEncodingException, solo come caso super-extra-eccezionale e se lanciasse questo, rilancerei fuori un Error che segnala una anomalia davvero "grave".

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    codice:
                BigInteger number = new BigInteger(1, messageDigest);
                String hashtext = number.toString(16);
                while (hashtext.length() < 32) {
                    hashtext = "0" + hashtext;
                }
    No, questo non mi piace.

    Farei almeno questo:
    codice:
    StringBuilder buf = new StringBuilder(messageDigest.length*2);
    for (byte b : messageDigest) {
        buf.append(String.format("%02X", b));
    }
    String md5Hex = buf.toString();

    E se lo vuoi tutto minuscolo, basta %02x

    Ma ci sono altre possibili soluzioni, anche più efficienti.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Altra domanda: in questo tuo metodo perché usi US-ASCII?
    Se legge da una pagina web .... dipende come è codificata la pagina. Non c'è uno standard in questo senso .... dipende.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #17
    Grazie andbin:

    Così il codice è perfetto?

    codice:
    package codicihash;
    
    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class CodiciHash {
    
        public static String getMD5(String input)
                throws UnsupportedEncodingException {
            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] messageDigest = md.digest(input.getBytes("UTF-8"));
                StringBuilder buf = new StringBuilder(messageDigest.length * 2);
                for (byte b : messageDigest) {
                    buf.append(String.format("%02x", b));
                    // Per ottenere il codice maiuscolo
                    // buf.append(String.format("%02X", b));
                }
                String md5Hex = buf.toString();
                return md5Hex;
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            }
        }
    
        public static void main(String[] args) throws NoSuchAlgorithmException,
                UnsupportedEncodingException {
            System.out.println(getMD5("gianni"));
        }
    
    }
    Più pratica in futuro...

  8. #18
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Come ti ha già detto andbin non rilanciare la UnsupportedEncodingException, è solo una rottura per chi chiamerà quel metodo: catturala e rilanciala come unchecked exception (o Error...)

    md5Hex è inutile, puoi restituire direttamente il valore senza usare una variabile.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #19
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Come ti ha già detto andbin non rilanciare la UnsupportedEncodingException, è solo una rottura per chi chiamerà quel metodo: catturala e rilanciala come unchecked exception (o Error...)

    md5Hex è inutile, puoi restituire direttamente il valore senza usare una variabile.
    Hai ragione scusa:

    codice:
    public static String OttieniMD5(String input)
                throws UnsupportedEncodingException, NoSuchAlgorithmException {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes("UTF-8"));
            StringBuilder buf = new StringBuilder(messageDigest.length * 2);
            for (byte b : messageDigest) {
                buf.append(String.format("%02x", b));
            }
            return buf.toString();
        }
    così dovrebbe essere perfetto.

    Mille grazie
    Più pratica in futuro...

  10. #20
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    così dovrebbe essere perfetto.
    throws UnsupportedEncodingException no, non "dovresti" farla uscire.
    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.