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

Discussione: MD5 & Esadecimale

  1. #1

    MD5 & Esadecimale

    Salve a tutti,
    Ho la necessita di dover convertire un'insieme di cifre esadecimali in formato MD5,solo che il risultato non è quello atteso.Ho notato che la conversione da esadecimale a byte "taglia" i valori superiori a 127,rendendoli negativi,ma non so se questo influisce sulla codifica.

    codice:
     
    public static String macToMD5(){
            String s="00193EA1B2C3";
            byte[] mac=new byte[6];
            for(int i=0;i < mac.length;i++){
                mac[i]=(byte)Integer.parseInt(s.substring(i * 2,i * 2 + 2),16);
            }
    
            byte[] md5=null;
            try{
                md5=createMD5(mac);
            }catch(NoSuchAlgorithmException ex){
            }catch(UnsupportedEncodingException ex){
            }
    
            return new String(md5);
        }
    
        private static byte[] createMD5(byte[] mac) throws NoSuchAlgorithmException,UnsupportedEncodingException{
            MessageDigest md=MessageDigest.getInstance("MD5");
            return md.digest(mac);
        }
    Grazie mille per le risposte.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    spet tu cosa devi fare?
    Hai una stringa che ha il mac e ne devi fare l'MD5?
    RTFM Read That F*** Manual!!!

  3. #3
    Esatto.Il mac posso averlo solo come stringa.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da Big Jumbo
    Esatto.Il mac posso averlo solo come stringa.
    ok ma tu parti da una stringa base 64?
    RTFM Read That F*** Manual!!!

  5. #5

    Re: MD5 & Esadecimale

    Originariamente inviato da Big Jumbo
    Salve a tutti,
    Ho la necessita di dover convertire un'insieme di cifre esadecimali in formato MD5
    Intervengo eccezionalmente in questa area fornendo la soluzione, soprattutto perchè spinto dalla voglia di correggere l'espressione quotata: l'MD5 non è un formato stringa quanto un algoritmo di crittanalisi, utilizzato in moltissimi ambiti dell'IT applicata. E' più appropriato parlare di "ottenere il codice MD5 relativo a..".

    La soluzione:
    codice:
            String tuastringa 
    byte bytes[] = tuastringa.getBytes();
    ed usi bytes come argomento della tua funzione di codifica.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Re: MD5 & Esadecimale

    Originariamente inviato da MdE2005
    Intervengo eccezionalmente in questa area fornendo la soluzione, soprattutto perchè spinto dalla voglia di correggere l'espressione quotata: l'MD5 non è un formato stringa quanto un algoritmo di crittanalisi, utilizzato in moltissimi ambiti dell'IT applicata. E' più appropriato parlare di "ottenere il codice MD5 relativo a..".

    La soluzione:
    codice:
            String tuastringa 
    byte bytes[] = tuastringa.getBytes();
    ed usi bytes come argomento della tua funzione di codifica.
    ni, getBytes non è corretto, secondo me lo si dovrebbe proprio deprecare, ma sarebbe da usare la funzione getBytes(CODIFICA) in cui vai a specificare la codepage utilizzata

    aspetto di sapere se è un base64 per dire altro
    RTFM Read That F*** Manual!!!

  7. #7
    MdE2005 grazie per il tuo intervento.
    La soluzione che hai postato sarebbe la piu semplice e intuitva,se non che trasforma ogni singola lettera in un byte,producendo cosi 12 byte,quando io ho bisogno di 6 byte contenente ogniuno 2 caratteri.
    Mi scuso per l'essermi espresso male riguardo all'md5,ma sono a conoscenza del fatto non è un formato stringa ma un tipo di algoritmo di crittanalisi.

    valia grazie anche a te della risposta.
    Non ho esattamente capito cosa intendi per "base 64".La stringa è una normalissima String.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Base64 è un comunissimo modo per esprimere i dati binari in formato stampabile.

    Metti che tu hai dei dati e vuoi passarli che so su di un file di testo. Per fare in modo che vengano letti correttamente, vengono "trasformati" in un formato stampabile, appunto il base64. E' da capire quale è la tua stringa di partenza.
    Usare il base64 non cambia la natura della stringa (sempre una sequenza di caratteri), cambia la natura logica del contenuto.

    qui hai quello che dice wikipedia in italiano.

    Fai conto che in java, se parti dal base64, quello che devi fare è semplice:

    codice:
    byte [] input = Base64.decode(stringa); 
    
    byte[] output = md5 (input);
    fai conto che spesso anche l'output viene trasformato in base64

    ps non mi ricordo il package, ma la rete è piena di esempi di conversione da base 64 a binario
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    C'è stata un po' di confusione in questo thread credo.

    L'op voleva solo sapere come ottenere una stringa stampabile per un md5.

    Da che mondo e mondo si stampano i 16 bytes dell'md5 in esadecimale, ottenendo quindi una stringa di 32 caratteri.

    Un modo semplice e sbrigativo è sostiture la riga:
    return new String(md5);
    con
    return String.format("%032x", new BigInteger(1, md5));

    (importa java.math.BigInteger)

    Ciao.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da c0der
    C'è stata un po' di confusione in questo thread credo.

    L'op voleva solo sapere come ottenere una stringa stampabile per un md5.

    Da che mondo e mondo si stampano i 16 bytes dell'md5 in esadecimale, ottenendo quindi una stringa di 32 caratteri.

    Un modo semplice e sbrigativo è sostiture la riga:
    return new String(md5);
    con
    return String.format("%032x", new BigInteger(1, md5));

    (importa java.math.BigInteger)

    Ciao.
    io onestamente mi sono fermata prima, perché non sono sicurissima che la trasformazione che fa da stringa a byte sia corretta (sempre perché non sono sicura del contenuto logico della stringa di partenza).

    Poi per averne una versione stampabile torni a dover passare per il base64...insomma mi sono focalizzata sul primo errore, nemmeno il passaggio che hai fatto tu è corretto, perché BigInteger suppone che MD5 sia un numero e in generale non è vero (è un array di byte, diverso da dire che quell'array rappresenta un valore intero).
    RTFM Read That F*** Manual!!!

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.