Question

J'ai rencontré un problème intéressant .. Il semble que ComputeHash () pour une table de hachage « de HMACSHA256 » ne se comporte pas .. si je déterministe créer deux instances de HashAlgorithm en utilisant HashAlgorithm.Create ( « HMACSHA256 ») .. Et ComputeHash course, je reçois deux résultats différents .. ci-dessous est une classe statique exemple qu'exposer ce comportement.

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

Je l'ai également essayé de faire l'appel non statique (en fait il a commencé non statique, et je double et triple et quadrudruple vérifié mon tableau d'entrée .. son tout à fait la même chose sur chaque appel .. J'ai même pui dans la fenêtre immidiate comme:

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

Et en cours d'exécution que deux fois dans la fenêtre immidiates via un point d'arrêt dans la méthode renvoie deux différents hachages ..

Je sais Hash est censé être déterministe .. Alors qu'est-ce qui se passe? se passe quelque chose en cours d'exécution avec un débogueur? Ou d'autres idées? vraiment c'est juste deux mots bizarres en ce moment :-P ..

Merci Josh

Était-ce utile?

La solution

HMAC est un hachage à clé. Je ne vois pas la clé dans votre code exemple.

HashAlgorithm.Create("HMACSHA256") crée une instance HashAlgorithm, il ne sait rien sur une clé. Il appelle probablement ce HMACSHA256 Constructor:

  

public HMACSHA256()

     

Initialise une nouvelle instance de la classe HMACSHA256 avec clé générée au hasard .

Vous voulez ce constructeur :

  

public HMACSHA256(byte[] key)

     

Initialise une nouvelle instance de la classe HMACSHA256 avec les données clés spécifiées.

Si vous ne voulez pas coder en dur l'algorithme HMAC, vous pouvez utiliser KeyedHashAlgorithm.Create et fournir une clé spécifique en définissant la KeyedHashAlgorithm.Key propriété.

Si vous ne souhaitez pas utiliser une clé, puis utilisez un hachage sans clé comme SHA256.

Autres conseils

Il suffit d'ajouter à cela dans l'espoir de sauver quelqu'un le mal de tête, je suis passé par.

Dans le cas de fournisseur .Net membres , assurez-vous que les paramètres de votre web.config ou app.config. Sinon, il génère automatiquement sa propre clé ... merde sur l'authentification, puis rire belligérant à vous à la fin.

Vous avez besoin d'une clé pour HMACSHA256. La clé sera aléatoire si elle n'est pas passé dans le constructeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top