Codificar texto en SHA-256 en Java

Muchas veces es conveniente proteger de alguna manera los datos sensibles como pueden ser las contraseñas. Para protegerlas, se suele optar por cifrarlas, de manera que en la base de datos éstas se guarden cifradas y si alguien logra ver su contenido, no verá las contraseñas, sino su valor cifrado. Existen muchos métodos para realizar este cifrado, pero hoy nos vamos a ocupar de SHA-256 y lo vamos a implementar en Java.

El método de cifrado SHA-256 pertenece al conjunto de SHA-2 el cual fue diseñado por la NSA. Más que un algoritmo de encriptación, se trata de una función hash. Esto quiere decir que realmente lo que hace es crear una especie de cadena resumen (digest) del texto original. Este valor resultante tiene una longitud fija y no se puede obtener la cadena original a partir de este, ni siquiera su longitud.

Teniendo esto en cuenta, el cifrado SHA-256 se puede usar para almacenar contraseñas en la base de datos como se ha dicho en el primer párrafo. Así no se guardan las contraseñas en la base de datos y para validarlas simplemente se compara el valor SHA-256 de la contraseña pasada con el valor que hay en la base de datos. Otro uso común, puede ser el de comprobar la integridad de un fichero, es decir, que no se haya modificado por el camino. Si ha cambiado aunque sea un único carácter de un texto muy largo, su digest será distinto.

Función para codificar con SHA-256 un texto en Java

Mediante el paquete java.security, se puede diseñar una función como la siguiente. Esta función, recibe un parámetro que será el texto original sin codificar y devolverá el resumen generado mediante SHA-256.

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
	
public String convertirSHA256(String password) {
	MessageDigest md = null;
	try {
		md = MessageDigest.getInstance("SHA-256");
	} 
	catch (NoSuchAlgorithmException e) {		
		e.printStackTrace();
		return null;
	}
	    
	byte[] hash = md.digest(password.getBytes());
	StringBuffer sb = new StringBuffer();
	    
	for(byte b : hash) {        
		sb.append(String.format("%02x", b));
	}
	    
	return sb.toString();
}

Como se le pasa el tipo de codificador como una cadena, al obtener una instancia de MessageDigest puede devolver una excepción si no existiera, así que hay que escribirlo correctamente.

Deja un comentario

Esta web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está aceptando éstas y nuestra política de las mismas.

ACEPTAR
Aviso de cookies