2010-03-12 5 views
11

que estoy haciendo un hash MD5, y sólo quiere asegurarse de que el resultado de:¿Es el resultado de un md5 hash constant o dependiente del servidor?

md5.ComputeHash(bytePassword); 

es consistente independientemente del servidor?

p. Ej. ventanas 2003/2008 y 32/64 bits etc.

+3

¿Está haciendo un hash md5 para ocultar contraseñas en su base de datos? No debe http://wblinks.com/notes/storing-passwords-the-wrong-better-and-even-better-way – gingerbreadboy

Respuesta

18

Sí, es consistente, el md5 algorithm specification lo define independientemente de la plataforma.

+3

Excepto que he visto que algunos sistemas representan la salida con letras mayúsculas y algunas con letras más bajas. letras mayúsculas. Si está comparando la representación de cadena del resultado, asegúrese de hacer una comparación insensible a mayúsculas y minúsculas. –

+2

¿Está mezclando la representación hexadecimal (-> Cadena) con el valor MD5 (-> Numérico) y hace una comparación de cadenas? En ese caso, podría suceder que los caracteres hexadecimales válidos sean minúsculas o mayúsculas, pero el valor es el mismo. En otras palabras: si comparas 0xAa con 0xaA y consideras el caso relevante, entonces no estás comparando correctamente y consideraría que es un error. –

+0

El caso es irrelevante aquí, ya que el método devuelve una matriz de bytes; si quiere convertirlo en una cadena que represente los bytes como valores hexadecimales, entonces sería importante. – BrainSlugs83

1

hash MD5 es [/ hora del sistema/nada, excepto la entrada] independiente

3

El resultado de un hash md5 es un número. El número devuelto para una entrada dada es siempre el mismo, sin importar qué servidor o plataforma use.

Sin embargo, la expresión del número puede variar. Por ejemplo, 1 y 1.0 son el mismo número, pero se expresan de manera diferente. Del mismo modo, algunas plataformas devolverán el hash formateado de forma ligeramente diferente que otros. En este caso, tiene una matriz de bytes, y eso debería ser bastante seguro. Solo ten cuidado con lo que haces después de convertirlo en una cadena.

6

MD5 es independiente del sistema operativo y la arquitectura. Entonces es "consistente".

Sin embargo,, MD5 toma como entrada una secuencia arbitraria de bits y genera una secuencia de 128 bits. En muchas situaciones, quieres cadenas. Por ejemplo, quiere hash una contraseña, y la contraseña es inicialmente una cadena. La conversión de esa cadena en una secuencia de bits no es parte de MD5 en sí misma, y ​​existen varias convenciones. No sé exactamente sobre C#, pero el método equivalente a Java String.getBytes() utilizará el "juego de caracteres predeterminado de la plataforma", que puede variar con la instalación del sistema operativo. Del mismo modo, la salida de MD5 a menudo se convierte en una cadena con notación hexadecimal, y puede ser mayúscula o minúscula o lo que sea.

De modo que, si bien MD5 en sí mismo es consistente, a menudo acechan los errores en las piezas que preparan los datos para MD5 y postprocesan su salida. Tener cuidado.

+0

En C#/.NET debe especificar qué codificación desea use, por ejemplo: Encoding.UTF8.GetBytes ("Blah"), Encoding.ASCII.GetBytes ("Blah"), Encoding.UTF32.GetBytes ("Blah") ... – BrainSlugs83