Domanda

Ho incontrato un problema interessante .. Sembra che ComputeHash () per un hash "HMACSHA256" non si comporta deterministicamente .. se creo due istanze di HashAlgorithm utilizzando HashAlgorithm.Create ( "HMACSHA256") .. E run ComputeHash, ottengo due risultati diversi .. qui di seguito è una classe di esempio statica che presenta questo comportamento.

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

Inoltre ho provato a fare il non statica chiamata (in realtà è iniziato non statica, e non ho doppie e triple e quadrudruple controllato la mia matrice di ingresso .. la sua assolutamente lo stesso su ogni chiamata .. ho anche roba fatta nella finestra immidiate come:

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

E in esecuzione che per due volte nella finestra immidiates attraverso un punto di interruzione nel metodo restituisce due hash differenti ..

Lo so Hash è supponiamo di essere deterministico .. Quindi, cosa succede? qualcosa da fare con l'esecuzione in un debugger? O altre idee? in realtà questo è solo due strano per le parole in questo momento :-P ..

Grazie Josh

È stato utile?

Soluzione

HMAC è un hash con chiave. Non vedo la chiave nel codice di esempio.

HashAlgorithm.Create("HMACSHA256") crea un'istanza HashAlgorithm, in modo che non sa nulla di un tasto. E 'probabilmente solo chiama questo HMACSHA256 Constructor :

  

public HMACSHA256()

     

Inizializza una nuova istanza della classe HMACSHA256 con un chiave generata casualmente .

Si vuole questo costruttore :

  

public HMACSHA256(byte[] key)

     

Inizializza una nuova istanza della classe HMACSHA256 con i dati chiave specificata.

Se non si desidera a hard-code l'algoritmo HMAC, è possibile utilizzare KeyedHashAlgorithm.Create e fornire una chiave specifica impostando il KeyedHashAlgorithm.Key proprietà.

Se non si desidera utilizzare una chiave, quindi utilizzare un hash non digitato come SHA256.

Altri suggerimenti

Basta aggiungere a questo, nella speranza di salvare qualcuno il mal di testa che ho passato.

Nel caso di Net provider di appartenenze , assicurarsi di avere l'impostazione nel web.config o app.config. Altrimenti genererà automaticamente la propria chiave ... merda su autenticazione e quindi bellicoso ridere di voi, alla fine.

Hai bisogno di una chiave per HMACSHA256. La chiave sarà casuale se non viene passato al costruttore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top