Cálculo de los valores hash MD5 y SHA1 del contenido de un fichero de entrada que será pasado como parámetro al programa.
import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.*;
import java.util.*;
public class resumenes
{
public static void main(String [] args)
{
//declarar funciones resumen
try{
MessageDigest messageDigest = MessageDigest.getInstance("MD5"); // Inicializa MD5
MessageDigest messageDigest2 = MessageDigest.getInstance("SHA"); // Inicializa SHA-1
//leer fichero byte a byte
try{
InputStream archivo = new FileInputStream( args[0] );
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
messageDigest2.update(buffer);
caracter = archivo.read(buffer);
}
archivo.close();
byte[] resumen = messageDigest.digest(); // Genera el resumen MD5
byte[] resumen2 = messageDigest2.digest(); // Genera el resumen SHA-1
//Pasar los resumenes a hexadecimal
String s = "";
for (int i = 0; i < resumen.length; i++)
{
s += Integer.toHexString((resumen[i] >> 4) & 0xf);
s += Integer.toHexString(resumen[i] & 0xf);
}
System.out.println("Resumen MD5: " + s);
String m = "";
for (int i = 0; i < resumen2.length; i++)
{
m += Integer.toHexString((resumen2[i] >> 4) & 0xf);
m += Integer.toHexString(resumen2[i] & 0xf);
}
System.out.println("Resumen SHA-1: " + m);
}
//lectura de los datos del fichero
catch(java.io.FileNotFoundException fnfe) {}
catch(java.io.IOException ioe) {}
}
//declarar funciones resumen
catch(java.security.NoSuchAlgorithmException nsae) {}
}
}
El resultado de ambas operaciones se mostrará por pantalla.
Se pasará el nombre del fichero si éste se halla en el mismo directorio del programa y la ruta completa si no está en el mismo directorio
Un ejemplo de llamada al programa será:
>>java resumenes fichero_entrada