jueves, 11 de julio de 2013

Funciones de Resumen MD5 y SHA en JAVA [aplicado a archivos]


El la publicación anterior compartí el código java para generar funciones hash a una cadena  utilizando los algoritmos MD2, MD5, SHA-1,SHA-256,SHA-384,SHA-256.

Si deseas puedes consultar  el post Funciones de Resumen MD5 y SHA en JAVA en el cual explico brevemente las funciones hash.

Para realizar las capturas de pantalla utilizo la aplicación publicada aquí: Aplicacion Java para realizar capturas de pantalla.


El código para obtener la cadena hash de un archivo es el siguiente:

import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.*;
import java.util.*;
/*Aplicacion para generar resumenes hash de un archivo
 * @marxs7 Less is better
 * http://marxs7.blogspot.com
 */
public class HashArchivo
{
    private static String hash;
   public static String generaHash(String rutaArchivo,String algoritmo)
   {
   
    //declarar funcion de resumen
      try{
      MessageDigest messageDigest = MessageDigest.getInstance(algoritmo); // Inicializa con algoritmo seleccionado
     
      //leer fichero byte a byte 
         try{
            InputStream archivo = new FileInputStream( rutaArchivo );
            byte[] buffer = new byte[1];
            int fin_archivo = -1;
            int caracter;
       
            caracter = archivo.read(buffer);
       
            while( caracter != fin_archivo ) {
         
               messageDigest.update(buffer); // Pasa texto claro a la función resumen
               caracter = archivo.read(buffer);
            }   
       
            archivo.close();//cerramos el archivo
            byte[] resumen = messageDigest.digest(); // Genera el resumen 
            
            //Pasar los resumenes a hexadecimal
            hash = "";
            for (int i = 0; i < resumen.length; i++)
            {
               hash += Integer.toHexString((resumen[i] >> 4) & 0xf);
               hash += Integer.toHexString(resumen[i] & 0xf);
            }
          //  System.out.println("Resumen "+algoritmo+" " + hash);
         }
         //lectura de los datos del fichero
         catch(java.io.FileNotFoundException fnfe) {
         //manejar excepcion archivo no encontrado
         }
         catch(java.io.IOException ioe) {
         //manejar excepcion archivo
         }
      
      }   
      //declarar funciones resumen
      catch(java.security.NoSuchAlgorithmException nsae) {
      //manejar excepcion algorito seleccionado erroneo
      }
        return hash;//regresamos el resumen
      
   }

}


A partir de este código podemos generar una interfaz gráfica que nos permita fácilmente  obtener el valor MD5 o SHA de un archivo en formato hexadecimal.

En mi caso la interfaz es la siguiente.




Descarga











1 comentario: