Tengo una tabla SQL con nombres de usuario y contraseñas. Las contraseñas están codificadas usando el método digest() de MessageDigest. Si codigo una contraseña - digamos "abcdef12" - con el método digest() de MessageDigest y luego la convierto en valores hexadecimales, el String es diferente que si hago lo mismo usando el método SHA1 de PHP. Sin embargo, espero que estos valores sean exactamente los mismos.El algoritmo MessageDigest SHA1 de Java arroja resultados diferentes a los de la función SHA1 de php
código que se utiliza para codificar las contraseñas:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] passbyte;
passbyte = "abcdef12".getBytes("UTF-8");
passbyte = md.digest(passbyte);
La conversión de la cadena en hexadecimal se realiza utilizando este método:
public static String convertStringToHex(String str) {
char[] chars = str.toCharArray();
StringBuffer hex = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
hex.append(Integer.toHexString((int) chars[i]));
}
return hex.toString();
}
Contraseña: ABCDEF12
Aquí es la contraseña devuelta por muchos generadores en línea SHA1-hash y PHP SHA1() - función: d253e3b d69ce1e7ce6074345fd5faa1a3c2e89ef
Ésta es la contraseña codificada por MessageDigest: d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef
Estoy olvidando algo?
Igor.
Editar: He encontrado a alguien con un problema similar: C# SHA-1 vs. PHP SHA-1...Different Results?. La solución fue cambiar las codificaciones ... pero no puedo cambiar las codificaciones en el lado del servidor ya que las contraseñas en esa tabla SQL no son creadas por mi aplicación. Uso la codificación SHA1 del lado del cliente utilizando una clase SHA1 de JavaScript (más precisamente: una clase Google Web Toolkit). Funciona y codifica la cadena como se esperaba, pero al parecer el uso de caracteres ASCII ..
¡Gracias! Tu respuesta resolvió mi problema. ¡Fallé al convertir correctamente la matriz de bytes a una cadena hexadecimal! ¡Utilicé el método de @stivlo y funcionó de maravilla! Voy a marcar esta respuesta como correcta, aunque en este caso desearía poder marcar ambas respuestas como la correcta. ¡Gracias a los dos! – Igor