Pregunta

Me he encontrado un tema interesante .. Parece que ComputeHash () para un hash "HMACSHA256" no se está comportando de forma determinista .. si puedo crear dos instancias de HashAlgorithm usando HashAlgorithm.Create ( "HMACSHA256") .. Y ComputeHash plazo, consigo dos resultados diferentes .. a continuación es un ejemplo de clase estática que exhiben este comportamiento.

internal static string HashPassword(byte[] bAll)
{
    using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
    {
        return Convert.ToBase64String(s.ComputeHash(bAll));
    }
}

También he intentado hacer la llamada que no es estática (en realidad comenzado no estática, y tengo dobles y triples y quadrudruple comprobado mi matriz de entrada .. su absolutamente el mismo en cada llamada .. tengo incluso la materia hecha en la ventana immidiate como:

Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)

Y que correr dos veces en la ventana immidiates a través de un punto de interrupción en el método devuelve dos valores hash diferentes ..

Sé Hash se supone que debe ser determinista .. Entonces, ¿qué pasa? hay algo que hacer con el funcionamiento en un depurador? O alguna otra idea? Realmente esto es sólo extraño para dos palabras ahora mismo :-P ..

Gracias Josh

¿Fue útil?

Solución

HMAC es una clave hash. No veo la llave en su código de ejemplo.

HashAlgorithm.Create("HMACSHA256") crea una instancia de HashAlgorithm, por lo que no sabe nada acerca de una tecla. Probablemente sólo llama este HMACSHA256 Constructor :

public HMACSHA256()

inicializa una nueva instancia de la clase HMACSHA256 con un clave generada aleatoriamente .

este constructor :

public HMACSHA256(byte[] key)

inicializa una nueva instancia de la clase HMACSHA256 con los datos de clave especificada.

Si no desea a codificar el algoritmo HMAC, puede utilizar KeyedHashAlgorithm.Create y suministrar una clave específica mediante el establecimiento de la KeyedHashAlgorithm.Key .

Si no desea utilizar una clave, a continuación, utilizar un hash no con llave como SHA256.

Otros consejos

Simplemente añadiendo a esto con la esperanza de salvar a alguien el dolor de cabeza que he pasado.

En el caso de .Net proveedor de miembro , asegúrese de que tiene la configuración de su web.config o app.config. De lo contrario se generará automáticamente su propia clave ... basura fuera de autenticación, y luego reír agresivamente a usted en el final.

Se necesita una llave para HMACSHA256. La clave será al azar si no se pasa al constructor.

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