web-dev-qa-db-fra.com

Comment générer HMAC-SHA256 dans .Net Core?

J'utilise cette page pour générer des hachages de test HMAC-SHA256 pour certains textes:

https://www.liavaag.org/English/SHA-Generator/HMAC/

Cependant, lorsque j'essaie d'utiliser l'approche dans ce guide MSDN dans mon projet .Net Core, je n'obtiens pas les mêmes résultats. Quelqu'un pourrait-il m'expliquer comment obtenir des résultats identiques à ceux que j'obtiens de la page Web précédente dans mon code C #?

Voici mon code:

// My own GetHash method usage:
var hashed = PasswordHelper.GetHash("Test", Encoding.UTF8.GetBytes("123"));

public static string GetHash(string password, byte[] salt)
{
    // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations)
    string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
        password: password,
        salt: salt,
        prf: KeyDerivationPrf.HMACSHA256,
        iterationCount: 10000,
        numBytesRequested: 256 / 8));
    return hashed;
}
10
Mohammed Noureldin

En utilisant l'approche suivante:

public static String GetHash(String text, String key)
{
    // change according to your needs, an UTF8Encoding
    // could be more suitable in certain situations
    ASCIIEncoding encoding = new ASCIIEncoding();

    Byte[] textBytes = encoding.GetBytes(text);
    Byte[] keyBytes = encoding.GetBytes(key);

    Byte[] hashBytes;

    using (HMACSHA256 hash = new HMACSHA256(keyBytes))
        hashBytes = hash.ComputeHash(textBytes);

    return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}

vous obtiendrez le même résultat que le site que vous avez fourni:

Console.WriteLine(GetHash("qwerty","123456"));
// 3364ad93c083dc76d7976b875912442615cc6f7e3ce727b2316173800ca32b3a

Preuve:

Proof

En fait, le code que vous utilisez, qui est basé sur ce tutoriel et sur KeyDerivation.Pbkdf2, produit des résultats différents car il utilise un paramétrage beaucoup plus complexe et un autre encodage. Mais malgré les résultats différents, vous devez [~ # ~] vraiment [~ # ~] utiliser l'approche fournie par l'exemple et vous en tenir à la UTF8 encodage.

27
Tommaso Belluzzo