Blog
La encriptación de datos es utilizada en la mayoría de los sistemas, ya que nos permite hacer ilegible información considera importante, por ejemplo una contraseña o el nombre de una imagen. Es por eso que en este tutorial aprenderemos a encriptar en MD5 y SHA1 con Java.
¿Cómo encriptar en MD5 y SHA1 con Java?
Antes de comenzar es importante saber que un dato encriptado es irreversible, esto quiere decir que no se puede obtener de ninguna manera el dato original a partir del hash generado, es por eso que solamente vamos a realizar las funciones que hagan la encriptación.
Ahora podemos pasar al código fuente, la siguiente clase permite encriptar un string usando los métodos estáticos MD5 y SHA1:
public class Hash { /* Retorna un hash a partir de un tipo y un texto */ public static String getHash(String txt, String hashType) { try { java.security.MessageDigest md = java.security.MessageDigest .getInstance(hashType); byte[] array = md.digest(txt.getBytes()); StringBuffer sb = new StringBuffer(); for (int i = 0; i < array.length; ++i) { sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100) .substring(1, 3)); } return sb.toString(); } catch (java.security.NoSuchAlgorithmException e) { System.out.println(e.getMessage()); } return null; } /* Retorna un hash MD5 a partir de un texto */ public static String md5(String txt) { return Hash.getHash(txt, "MD5"); } /* Retorna un hash SHA1 a partir de un texto */ public static String sha1(String txt) { return Hash.getHash(txt, "SHA1"); } }
Ahora para probar la clase anterior podemos hacer los siguiente:
public static void main(String[] args) { System.out.println(Hash.md5("Hola Mundo!")); System.out.println(Hash.sha1("Hola Mundo!")); }
Bueno gente, espero que les haya sido de gran utilidad este tutorial y ante cualquier problema no duden en dejar un comentario.
Gracias por el código de cifrado hash.
José, ¿para cuándo una encriptación en doble sentido, como AES?
Hola amigo, muy buen aporte, ahora como haría si quiero hacer lo inverso? es decir descifrar una cadena MD5
Hola Yesid, me alegra que te haya servido. Lamentablemente la inversa no se puede hacer, más que nada por un tema de seguridad. En el caso de que quieras comparar un hash con un texto primero hay que hacer la conversión de ese texto a MD5 y luego compararlos.
Cómo sería para lograr lo mismo en Android Studio?
Hola Omar, para Android vas a tener que utilizar el lenguaje de programación Java, ya que es el que se utiliza en ese caso. En Java podes usar la clase MessageDigest como se ve en https://stackoverflow.com/questions/415953/how-can-i-generate-an-md5-hash
hola amigo, segun dices esta encriptacion no se puede desencriptar, y cual es entonces la clase o metodo que te permite encriptar y desencriptar ???