net metodo generar example ejemplos ejemplo busqueda asp .net security hash cryptography

.net - generar - metodo de busqueda hash en c#



¿Por qué mi hash MD5 calculado en.net no es equivalente al hash calculado en un sitio web? (6)

Ejecutando el código del sitio de MSDN que cita:

// Hash an input string and return the hash as // a 32 character hexadecimal string. static string getMd5Hash(string input) { // Create a new instance of the MD5CryptoServiceProvider object. MD5 md5Hasher = MD5.Create(); // Convert the input string to a byte array and compute the hash. byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); // Create a new Stringbuilder to collect the bytes // and create a string. StringBuilder sBuilder = new StringBuilder(); // Loop through each byte of the hashed data // and format each one as a hexadecimal string. for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } // Return the hexadecimal string. return sBuilder.ToString(); } static void Main(string[] args) { System.Console.WriteLine(getMd5Hash("password")); }

devoluciones:

5f4dcc3b5aa765d61d8327deb882cf99

Estoy tratando de generar hashes MD5 equivalentes tanto en JavaScript como en .Net. Al no haberlo hecho tampoco, decidí usar contra un cálculo de terceros, este sitio web para la palabra "contraseña". Agregaré las sales más adelante, pero por el momento, no puedo hacer que la versión .net coincida con el hash del sitio web:

5f4dcc3b5aa765d61d8327deb882cf99

Supongo que es un problema de codificación, pero he probado alrededor de 8 diferentes variaciones de métodos para calcular un hash MD5 en .Net, y ninguno de ellos coincide con lo que he obtenido en JavaScript (o desde el sitio web). Este ejemplo de MSDN es uno de los métodos que he probado, que da como resultado este hash que recibí comúnmente:

7c6a180b36896a0a8c02787eeafb0e4c

Editar: Tristemente, he estado proporcionando accidentalmente diferentes cadenas fuente a las dos implementaciones diferentes. EBSAK. : - / Todavía estará interesado en escuchar su respuesta al seguimiento.

Pregunta de bonificación: ¿qué codificación / formato sería mejor para almacenar valores hash en una base de datos?


Esta versión de VB.Net da los mismos resultados que MySQL de mi propia experiencia:

Private Function MD5Hash(ByVal str As String) As String Dim md5 As MD5 = MD5CryptoServiceProvider.Create Dim hashed As Byte() = md5.ComputeHash(Encoding.Default.GetBytes(str)) Dim sb As New StringBuilder For i As Integer = 0 To hashed.Length - 1 sb.AppendFormat("{0:x2}", hashed(i)) Next Return sb.ToString End Function


Obtengo el mismo valor que ese sitio web para la palabra "contraseña":

$ echo -n password | md5 5f4dcc3b5aa765d61d8327deb882cf99

Sin ver el código que está usando en realidad, es difícil saber qué podría estar pasando mal.

En cuanto a almacenar hashes en una base de datos, los almaceno como una cadena hexadecimal. Aunque la mayoría de las bases de datos pueden manejar blobs binarios, almacenarlos como binarios solo ahorra la mitad del espacio y son más difíciles de consultar y manipular. Lo más probable es que los demás datos que está almacenando junto con el hash sean más grandes de todos modos.


¿Tiene algún código de cómo está tratando de hacer esto?

(respuesta a la segunda Q) Normalmente utilizo un campo de cadena y lo almaceno como codificación BASE64. Lo suficientemente fácil para trabajar y hacer comparaciones.

/// <summary> /// Gets the Base 64 encoded SHA1 hashed password /// </summary> /// <returns>A Base 64 encoded string representing the SHA1 Hash of the password</returns> public string ToBase64SHA1String() { return Convert.ToBase64String(this.GetSHA1HashCode()); }


También se debe tener en cuenta que las sumas de MD5 se pueden descifrar con tablas de arcoíris (hay programas gratuitos en Internet que aceptarán una suma MD5 como entrada y generarán un texto claro, que normalmente es una contraseña)

SHA1 es probablemente una mejor opción ...

EDITAR: agregar sal es una buena manera de evitar que se invierta el hash
EDIT 2: si me hubiera molestado en leer tu publicación, me habría dado cuenta de que ya habías mencionado que planeas agregar sal


Esto está sucediendo porque de alguna manera has hashing password1 lugar de password , o tal vez calculando la password incorrectamente y de alguna manera misteriosamente equivale a password1 .

Puede hacer una búsqueda inversa del hash md5 proporcionado por Google

7c6a180b36896a0a8c02787eeafb0e4c