viernes, 4 de enero de 2008

Encryptar en MD5 desde Java

Bueno, un dia de estos estaba haciendo un Sistema que me dejaron en la Universidad, tiene que ver con bases de datos, registros y cosas asi, la cuestion es que necesitaba codificar las claves de los usuarios, claro, todo esto para que sea un sistema formal.

Googleando me encontre un codigo algo confuso, pero al suave lo acomode y lo adapate a mis necesidades, aqui lo dejo para ver a quien le sirve.



Luego solo se crea un nuevo objecto de la clase y se llama al metodo getEncoded con sus respectivos parametros, y eso es todo.

9 comentarios:

Anónimo dijo...

Loco sabes que la proxima vez que publiques codigo en tu blog usa code2html (instalar con apt) y el te vuela el resaltado bonito con colores en html

Anónimo dijo...

gracias fitoria, buen aporte pri.

Saludos

Anónimo dijo...

Buen código, me sirvio bastante.
Gracias

Anónimo dijo...

Hola, creo que el código no es correcto. Lo que está devolviendo el método no es la representación ASCII de la codificación MD5, es la secuencia de de valores en decimal convertida a ASCII directamente, lo que da lugar a una cadena que puede estar formada por caracteres diferentes a los de la representación hexadecimal([0-9a-z]).

Unknown dijo...

bueno, si crees que esta mal, porque no dejas el codigo ya correcto segun vos para ver como es.

Anónimo dijo...

Hola, no creo que esté mal. En realidad estoy seguro de ello ;). Verás, prueba a codificar las cadenas que hay aquí con tu algoritmo.

En realidad lo que tienes que hacer es pasar a notación hexadecimal lo que imprime esto:

...
byte [] md5_bytes = tuCodificador.getEncoded("ejemplo", "md5").getBytes();
for(byte b: md5_bytes) {
System.out.println(Byte.toString((byte)((b & 0xF0) >> 4)));
System.out.println(Byte.toString((byte)(b & 0x0F)));
}
...

No deberías tener problemas para averiguar cómo (0 = "0", ..., 9 = "9", 10 = "a", ..., 15 = "f").

Anónimo dijo...

Tiene razón Zorro

Te devuelve el código directo del md5, pero está codificado como enteros, no como String. puedes ponerle algo así antes de la salida:

String s = "";
for (int i = 0; i < resumen.length; i++){
s += Integer.toHexString((resumen[i] >> 4) & 0xf);
s += Integer.toHexString(resumen[i] & 0xf);
}
Y la salida será s.
dos páginas de referencia.

http://www.naslu.com/resource.aspx?id=254

http://www.trespuntodos.com/post/encriptar-md5-en-java

Rocha dijo...

java no soporta la fucion directa de md5 ? ejemplo:



String sql= "insert into clientes (usuario,pass,email) values(?,md5(?),?)";


try {


st = cn.prepareStatement(sql);
st.setString(1, usuario);
st.setString(2, pass);
st.setString(3, email);
st.executeUpdate();

Anónimo dijo...

La palabra encryptar no existe... www.rae.es/cifrar, se dice cifrar ;)