Código Java – Función de Encriptación mediante MD5


Este es el Ejemplo #09 del Topic: Programación Gráfica en Java.

El tema de hoy tampoco trata específicamente de programación gráfica, pero en pleno desarrollo de un proyecto podría necesitarlo. Se trata de un mecanismo de encriptación no reversible aunque a lo largo de los años han sucedido una serie de ataques para pasar la barrera de seguridad que proponía. A pesar de que es un método de cifrado no reversible es muy sensible al ataque por colisiones, sin embargo puede ser usado aún por ejemplo para comprobar la integridad de un archivo descargado de esa manera evitamos obtener archivos dañados o corruptos alterados maliciosamente mediante su cheksum o como paso previo a la autentificación de un usuario al coincidir el hash.

Observemos la codificación en java de la función getMD5 que retorna un String hash:

...
    public String getMD5(String cadena) throws Exception {

        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] b = md.digest(cadena.getBytes());

        int size = b.length;
        StringBuilder h = new StringBuilder(size);
        for (int i = 0; i < size; i++) {

            int u = b[i] & 255;

            if (u < 16)
            {
                h.append("0").append(Integer.toHexString(u));
            }
            else
            {
                h.append(Integer.toHexString(u));
            }
        }
        return h.toString();
    }
...

Código de Ejemplo:

package beastieux.gui;

import java.security.MessageDigest;
import javax.swing.JOptionPane;

/**
 *
 * @author beastieux
 */
public class Ejm09_EncriptacionMD5 {

    public String getMD5(String cadena) throws Exception {

        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] b = md.digest(cadena.getBytes());

        int size = b.length;
        StringBuilder h = new StringBuilder(size);
        for (int i = 0; i < size; i++) {

            int u = b[i] & 255;

            if (u < 16)
            {
                h.append("0").append(Integer.toHexString(u));
            }
            else
            {
                h.append(Integer.toHexString(u));
            }
        }
        return h.toString();
    }

    public static void main(String args[]) {
        Ejm09_EncriptacionMD5 obj = new Ejm09_EncriptacionMD5();

        try {
            JOptionPane.showMessageDialog(null, obj.getMD5("palabrasecreta"));
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }

}
Anuncios