Pregunta

Tengo un par de diferentes bits de código, pero el cuento es insertar algunas contraseñas en una base de datos MySQL utilizando SHA1 hashes SHA1 y también de cómputo en .NET y no son coincidentes. Creo que esto es un problema con mi código de codificación en .NET.

Código SQL:

INSERT INTO user_credentials (Password) VALUES (SHA1('password'));

hashes de contraseñas a 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

Código .NET:

public static string GetPasswordHash(string password)
{
    // problem here with encoding?
    byte[] byteArray = Encoding.ASCII.GetBytes(password);

    SHA1 sha = new SHA1CryptoServiceProvider();
    byte[] hashedPasswordBytes = sha.ComputeHash(byteArray);

    return Encoding.ASCII.GetString(hashedPasswordBytes);
}

hashes de contraseñas a [? un ??????% l? 3 ~ ???

Gracias por cualquier ayuda!

¿Fue útil?

Solución

En el ejemplo de MySQL que codifica a una hexadecimal cadena, en el ejemplo que .NET se codifica en ASCII. Los dos codificaciones no son los mismos.

Si convierte a hexadecimal en la versión .NET se obtiene el resultado correcto:

string hex = BitConverter.ToString(hashedPasswordBytes);

Resultados:

5B-AA-61-E4-C9-B9-3F-3F-06-82-25-0B-6C-F8-33-1B-7E-E6-8F-D8

Otros consejos

Es necesario poner en [?a??????%l?3~??? representación HEX. Lo que está imprimiendo es, probablemente, en forma binaria (de ahí los múltiples caracteres ?).

Trate de hacer esto:

string hexstring = BitConverter.ToString(hashedPasswordBytes);

y ver si hexstring y MySQL coincidencia hash.

The following will give you an exact match to what MySQL produces:

 BitConverter.ToString(SHA1CryptoServiceProvider.Create().ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(Password))).Replace("-", "").ToLower();

The SHA1 hashes should be equal, but the representation is not. MySql outputs a hex-string, so you will need to do the same in .NET:

return String.Join(String.Empty, hashedPasswordBytes.Select(b => b.ToString("x2")))

How is your MySQL table/database encoded? Try setting both to UTF-8 (therefore using Encoding.UTF8.GetBytes)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top