Java – Obtener el hash SHA-256 de una cadena

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 

Un comentario sobre “Java – Obtener el hash SHA-256 de una cadena

Deja un comentario