web-dev-qa-db-ja.com

.Net CoreでHMAC-SHA256を生成する方法は?

このページを使用して、いくつかのテキストに対していくつかのテストHMAC-SHA256ハッシュを生成しています。

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

ただし、.Net Coreプロジェクトの このMSDNガイド でアプローチを使用しようとすると、同じ結果が得られません。 C#コードで前のWebページから取得したものと同じ結果を得る方法を誰かに説明してもらえますか?

これが私のコードです:

// 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

次のアプローチを使用します。

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();
}

あなたが提供したサイトと同じ結果が得られます:

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

証明:

Proof

実際、使用しているコードは このチュートリアルKeyDerivation.Pbkdf2に基づいていますが、はるかに複雑なパラメーター化と別のエンコーディングを使用しているため、異なる結果を生成しています。しかし、結果は異なりますが、[〜#〜]本当に[〜#〜]例で提供されているアプローチを使用し、 UTF8エンコード。

27