jueves, 28 de junio de 2012

Encriptando con Java usando MD5

MD5 (abreviatura de Message-Digest Algorithm 5, Algoritmo de
Resumen del Mensaje 5) es uno de los algoritmos de reducción criptográfico mas usado en la actualidad y su objetivo es ocultar el verdadero valor de un mensaje encriptandolo, de esta manera para cualquier mensaje siempre nos resultara un número de 32 dígitos hexadecimal, por ejemplo:
MD5("Esto sí es una prueba de MD5") = e99008846853ff3b725c27315e469fbc
MD5("") = d41d8cd98f00b204e9800998ecf8427e

En mi caso tenia la necesidad de guardar en una tabla de la Base de Datos todos los usuarios y contraseñas del sistema, por tema de seguridad no se puede guardar las contraseñas directamente, para eso mismo use MD5, el cual es un metodo nativo en MySQL, de esta manera cuando un usuario queria ingresar al sistema encriptaba por MD5 la contraseña ingresada y la comparaba con la guardada en la BD y si correspondia le permitia el acceso.

A continuación muestro los metodos usados para el proposito:

public static String encriptarPorMD5(String clave) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            return hex(md.digest(clave.getBytes("CP1252")));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

public static String hex(byte[] array) {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < array.length; ++i) {
            sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
        }

        return sb.toString();
    }

3 comentarios:

  1. amigo muy bien pero como logro desencriptarlo ? si lo uso en un password , como hago la comparacion cuando le hage getText ?

    ResponderEliminar
  2. No hay manera trivial de desencriptar un MD5, por eso es seguro (aunque es mas seguro SHA), lo que debes hacer es que cuando introduzcan la segunda contraseña debes encriptarla con el mismo metodo y compararla con la primera, si son iguales pues les das acceso.

    Saludos.

    ResponderEliminar
  3. por favor me podrias explicar que es lo que hace esta linea:
    sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
    gracias!

    ResponderEliminar