Autore Topic: Hash MD5 di un file  (Letto 820 volte)

Offline zipgenius

  • Utente junior
  • **
  • Post: 80
  • Respect: +17
    • matteoriso
    • Mostra profilo
    • ZipGenius
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Wininizio.it Software
  • Sistema operativo:
    Windows 7
Hash MD5 di un file
« il: 18 Agosto 2010, 09:54:41 CEST »
0
Buongiorno a tutti.
Ecco un nuovo problema.
Ho la necessità di calcolare l'hash MD5 di un file, il percorso del quale è memorizzato in una variabile string chiamata "filename".
Girovagando in rete ho trovato questo codice:
Codice (Java): [Seleziona]
public static String getMd5Hash(String input) {
        try     {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] messageDigest = md.digest(input.getBytes());
                BigInteger number = new BigInteger(1,messageDigest);
                String md5 = number.toString(16);
           
                while (md5.length() < 32)
                        md5 = "0" + md5;
           
                return md5;
        } catch(NoSuchAlgorithmException e) {
                Log.e("MD5", e.getMessage());
                return null;
        }
}
... che però genera l'hash di una stringa.
E se volessi modificarlo per avere l'hash di un file?

Offline zipgenius

  • Utente junior
  • **
  • Post: 80
  • Respect: +17
    • matteoriso
    • Mostra profilo
    • ZipGenius
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Wininizio.it Software
  • Sistema operativo:
    Windows 7
Re:Hash MD5 di un file
« Risposta #1 il: 18 Agosto 2010, 10:21:58 CEST »
+2
Mi rispondo da solo e a beneficio della comunità :)

Prima si crea...
Codice (Java): [Seleziona]
public static String getMd5FileHash(File input) throws NoSuchAlgorithmException, IOException {
            MessageDigest md = MessageDigest.getInstance("MD5");
                InputStream is = new FileInputStream(input);
                byte[] buffer = new byte[8192];
                int read = 0;          
                while( (read = is.read(buffer)) > 0) {
                        md.update(buffer, 0, read);
                }              
                        byte[] md5sum = md.digest();
                        BigInteger bigInt = new BigInteger(1, md5sum);
                        String output = bigInt.toString(16);
                        return output;
               
}

... e dopo, ove serve, si crea un "File" usando il percorso salvato nella variabile "filename":
Codice (Java): [Seleziona]
    File f = new File(filename);
                        try {
                                Toast.makeText(this, getMd5FileHash(f), Toast.LENGTH_LONG).show();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (NoSuchAlgorithmException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
Così vedremo apparire un Toast con l'hash MD5 del file indicato  8-)

frusso

  • Visitatore
Re:Hash MD5 di un file
« Risposta #2 il: 28 Febbraio 2011, 17:41:04 CET »
0
Grazie per aver condiviso il codice.

Molto utile. :-)