Ich bin in ein interessantes Problem geraten .. Es scheint, dass ComputeHash() für einen "HMACSHA256" Hash nicht deterministisch verhält .. wenn ich zwei Instanzen von HashAlgorithm mit HashAlgorithm.Create ("HMACSHA256") erstellen .. Und run ComputeHash, ich erhalte zwei verschiedene Ergebnisse. Unten ist eine statische Beispielklasse, die dieses Verhalten zeigt.Warum verhält sich ComputeHash nicht deterministisch?
internal static string HashPassword(byte[] bAll)
{
using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
{
return Convert.ToBase64String(s.ComputeHash(bAll));
}
}
habe ich auch versucht, den Anruf nicht statisch zu machen (es begann eigentlich nicht statisch, und ich habe doppelt und dreifach und quadrudruple überprüfte meine Eingabe-Array .. seine absolut die bei jedem Aufruf gleichen .. Ich habe auch Sachen im immidiate Fenster gemacht wie:
Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)
Und das bei dem Verfahren über einen Haltepunkt zweimal im immidiates Fenster läuft, gibt zwei unterschiedliche Hashes ..
ich weiß Hash ist wohl deterministisch zu sein. Was gibt es? Läuft etwas in einem Debugger? Oder irgendwelche anderen Ideen? wirklich dieses Recht jetzt Worte nur zwei seltsam ist :-P ..
Dank Josh
Haben Sie kurze Beispieldaten, die dieses Problem aufweisen? Ändert sich "bAlle" zwischen oder während der Anrufe? –
HMAC ist ein verschlüsselter Hash.Ich sehe den Schlüssel in Ihrem Beispielcode nicht. Ich glaube, dass der Schlüssel zufällig gesetzt wird, wenn Sie keinen explizit angeben. – dtb
nichts ändert sich zwischen den Anrufen .. Wie ich schon sagte, ich habe es sogar aus dem Fenster "Immidiates" gemacht. Hier sind 4 Aufrufe von meinem Immidiates-Fenster .. ja, sie sind nicht perfekt, weil Sie den HashAlgorithm entsorgen sollten, aber die Ergebnisse sind die Gleiches über Immidiates-Fenster oder die Methode. (Ich werde sie in den nächsten Kommentar einschließen, becase, ich habe keinen Platz zum Kopieren hier einfügen) –