Me he encontrado con un problema interesante .. Parece que ComputeHash() para un hash "HMACSHA256" no se comporta de manera determinista ... si creo dos instancias de HashAlgorithm usando HashAlgorithm.Create ("HMACSHA256") .. Y ejecuto ComputeHash, obtengo dos resultados diferentes. A continuación se muestra un ejemplo de clase estática que muestra este comportamiento.¿Por qué ComputeHash no actúa de manera determinista?
internal static string HashPassword(byte[] bAll)
{
using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
{
return Convert.ToBase64String(s.ComputeHash(bAll));
}
}
También he tratado de 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 .. I' incluso he hecho cosas en la ventana immidiate como:
Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)
Y corriendo el doble que 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é ocurre? ¿Algo está pasando con la ejecución? en un depurador? ¿O alguna otra idea? Realmente esto es sólo extraño para dos palabras ahora mismo :-P ..
Gracias Josh
¿Tiene algún breve ejemplo de muestra que presente este problema? ¿Hay algo que cambie 'bAll' entre o durante las llamadas? –
HMAC es un hash con clave.No veo la clave en tu código de ejemplo. Creo que la clave se establece aleatoriamente si no se especifica una explícitamente. – dtb
nada cambia entre llamadas .. Como dije, incluso he hecho esto desde la ventana de Immidiates ... Aquí hay 4 llamadas desde mi ventana de Immidiates ... sí, no son perfectas porque debe deshacerse del algoritmo HashAlgorithm, pero los resultados son mismo a través de la ventana Immidiates o el método. (Los incluiré en el próximo comentario, porque no tengo espacio para copiarlos, pégalos aquí) –