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;
}
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:
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.