Java – Obtener el hash SHA-256 de una cadena

abril 11, 2012

Para no almacenar las contraseñas de los usuarios, puedes guardar el hash y compararlo en el proceso de inicio de sesión. Existen varios algoritmos que te permiten obtener un hash, aquí mostraré cómo utilizar el SHA-256 en java.

String password="secret";
MessageDigest sha256=MessageDigest.getInstance("SHA-256");
sha256.update(password.getBytes("UTF-8"));
byte[] digest = sha256.digest();
StringBuffer sb=new StringBuffer();
for(int i=0;i<digest.length;i++){
    sb.append(String.format("%02x", digest[i]));
}
String hash=sb.toString(); //2bb80d5...527a25b

En internet hay una función que utiliza el método Integer.toHexString pero ésta no imprime el prefijo 0 (cero) en los número menores a 16, es decir, “0d” lo imprime como “d”; lo que causa una diferencia si lo comparas con el hash generado en la línea de comandos de Linux.

Para generar la cadena en la línea de comandos de linux, ejecuta el siguiente comando

echo -n "secret_password" | sha256sum

es importante el parámetro -n en el comando echo para que no agregué un carácter de salto de línea

Fuentes:
http://stackoverflow.com/questions/3021970/which-sha-256-is-correct-the-java-sha-256-digest-or-the-linux-commandline-tool 

Anuncios

Una respuesta to “Java – Obtener el hash SHA-256 de una cadena”

  1. carlos Says:

    Muy bueno


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: