/////////////////////////////////////////////////////////// // CRIPTOGRAFIA - Técnicas de desarrollo para profesionales /////////////////////////////////////////////////////////// // Capítulo 3: Criptografía en entornos Java // Sección 3.5: Codificación de funciones de una vía y hash /////////////////////////////////////////////////////////// // Listado 3.5: Generación de hashes utilizando // diferentes algoritmos del provider de Bouncy Castle. /////////////////////////////////////////////////////////// import java.security.*; import javax.crypto.*; public class EjemploHashes { public static void main (String[] args) throws Exception { // definimos la entrada o texto-plano byte[] texto_plano = "Contenido de prueba".getBytes(); // generamos el hash con el algoritmo MD2 y lo imprimimos MessageDigest mdMD2 = MessageDigest.getInstance("MD2", "BC"); mdMD2.update(texto_plano); System.out.println( "MD2: " + hexStringFromBytes(mdMD2.digest())); // ahora con el algoritmo MD4 MessageDigest mdMD4 = MessageDigest.getInstance("MD4", "BC"); mdMD4.update(texto_plano); System.out.println( "MD4: " + hexStringFromBytes(mdMD4.digest())); // algoritmo MD5 MessageDigest mdMD5 = MessageDigest.getInstance("MD5", "BC"); mdMD5.update(texto_plano); System.out.println( "MD5: " + hexStringFromBytes(mdMD5.digest())); // algoritmo SHA-1 MessageDigest mdSHA1 = MessageDigest.getInstance("SHA-1", "BC"); mdSHA1.update(texto_plano); System.out.println( "SHA-1: " + hexStringFromBytes(mdSHA1.digest())); // algoritmo SHA-256 MessageDigest mdSHA256 = MessageDigest.getInstance("SHA-256", "BC"); mdSHA256.update(texto_plano); System.out.println( "SHA-256: " + hexStringFromBytes(mdSHA256.digest())); // algoritmo SHA-384 MessageDigest mdSHA384 = MessageDigest.getInstance("SHA-384", "BC"); mdSHA384.update(texto_plano); System.out.println( "SHA-384: " + hexStringFromBytes(mdSHA384.digest())); // algoritmo SHA-512 MessageDigest mdSHA512 = MessageDigest.getInstance("SHA-512", "BC"); mdSHA512.update(texto_plano); System.out.println( "SHA-512: " + hexStringFromBytes(mdSHA512.digest())); // algoritmo Tiger MessageDigest mdTiger = MessageDigest.getInstance("Tiger", "BC"); mdTiger.update(texto_plano); System.out.println( "Tiger: " + hexStringFromBytes(mdTiger.digest())); } public String hexStringFromBytes(byte[] b) { static final char[] hexChars ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; String hex = ""; int msb = 0; int lsb = 0; int i; for (i = 0; i < b.length; i++) { msb = ((int)b[i] & 0x000000FF) / 16; lsb = ((int)b[i] & 0x000000FF) % 16; hex = hex + hexChars[msb] + hexChars[lsb]; } return(hex); } }