Ads 468x60px

Perfil

miƩrcoles, 27 de marzo de 2013

ContraseƱas encriptadas con Java

¿QuiĆ©n no ha querido encriptar texto o archivo? Hay diversas maneras para hacer eso, por ejemplo, utilizando un diccionario donde se reemplazara cada caracter por un cĆ³digo.. y para poder desencriptarlo se deberĆ­a utilizar el mismo diccionario para revertir el proceso. Pero si el diccionario cae en manos de alguien que no queremos que lo sepa, entonces estamos en peligro.
Cuando yo programaba en pascal, mi encriptaciĆ³n favorita era invirtiendo los bits... pero cualquiera tambiĆ©n puede invertir los bits y listo.
Pero ya gente experta logrĆ³ algoritmos de encriptaciĆ³n populares. Los mĆ”s conocidos: MD5 y SHA. 
En este post hablaremos cĆ³mo encriptar texto, sobretodo las contraseƱas, utilizando MD5 o SHA.

La historia de la criptografĆ­a es bastante larga e interesante, pero para nuestro dĆ­a a dĆ­a, solo necesitamos cĆ³mo utilizar las bibliotecas existentes en el mercado.
Hace un tiempo, hice un post de ello (MD5 en Java) que consistĆ­a en utilizar el mismo API de Java para generar MD5.Pero ahora mostrarĆ© una biblioteca muy Ćŗtil proporcionada por la fundaciĆ³n ASF

COMMONS CODEC

Podemos descargar su biblioteca desde aquĆ­ http://commons.apache.org/codec/download_codec.cgi
Descomprimimos el archivo y tomamos el .jar llamado commons-codec-1.5.jar y lo agregamos al proyecto. En NetBeans solo le damos clic derecho en Libraries del Proyecto y seleccionamos el .jar.

La clase DigestUtils es nuestra clase principal para utilizar los diferentes algoritmos de encriptaciĆ³n.

MD5

        String texto="Saludos desde Apuntesdejava.com";
        String encriptMD5=DigestUtils.md5Hex(texto);
        System.out.println("md5:"+encriptMD5);
La salida resultante es:
md5:e5adf3f9fe476c7816eacd3873f5b51f

Para comprobarlo, yo utilizo la consola de MySQL

SHA-HEX

Similar al MD5, solo es otro mƩtodo
        String texto="Saludos desde Apuntesdejava.com";
        String encript=DigestUtils.shaHex(texto);
        System.out.println("shaHex:"+encript);
La salida resultante es:
shaHex:2b05363b154309d7fc069cd922f316fa3f3ff866
Y en MySQL:

SHA-256 / 512

Para el SHA 256 se utiliza el mĆ©todo DigestUtils.sha256, y para 512, se utiliza DigestUtils.sha512. Los resultados son como siguen:
sha-256:9a4557a0f654365312b430b80f0da46be2c3a9db6a083f545145398fc66c92d8
sha-512:4c0a2187e03531011c7787752b66e8848a5f146e8aa08e5b5615030c5daa9cd756150e225943b5182de2434d925a4d6889b2d129ed87f23943bce9a8342b02bd
Como podemos ver.. a mayor bits, mayor confiabilidad.

Su contraparte, en MySQL, se utiliza la funciĆ³n sha2(). Ojo, esta funciĆ³n reciĆ©n estĆ” disponible en la versiĆ³n 5.5.5.