在 ASP.NET Core中的哈希密码

数据保护基本代码包括一个包含加密密钥派生函数的AspNetCore 密钥派生 此包是一个独立的组件,与数据保护系统的其余部分没有任何依赖关系。 它可以完全独立地使用。 为了方便起见,源与数据保护代码库并存。

包当前提供了一个允许使用PBKDF2 算法对密码进行哈希处理 KeyDerivation.Pbkdf2 方法。 此 API 与 .NET Framework 现有的Rfc2898DeriveBytes 类型非常相似,但有三个重要的区别:

  1. KeyDerivation.Pbkdf2 方法支持使用多个 PRFs (当前 HMACSHA1HMACSHA256HMACSHA512),而 Rfc2898DeriveBytes 类型仅支持 HMACSHA1

  2. KeyDerivation.Pbkdf2 方法将检测当前操作系统,并尝试选择最适合的例程实现,在某些情况下提供更好的性能。 (在 Windows 8 中,它提供 Rfc2898DeriveBytes吞吐量的10倍。)

  3. KeyDerivation.Pbkdf2 方法要求调用方指定所有参数(salt、PRF 和迭代计数)。 Rfc2898DeriveBytes 类型为这些值提供默认值。

using System;
using System.Security.Cryptography;
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
 
public class Program
{
    public static void Main(string[] args)
    {
        Console.Write("Enter a password: ");
        string password = Console.ReadLine();
 
        // generate a 128-bit salt using a secure PRNG
        byte[] salt = new byte[128 / 8];
        using (var rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(salt);
        }
        Console.WriteLine($"Salt: {Convert.ToBase64String(salt)}");
 
        // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations)
        string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
            password: password,
            salt: salt,
            prf: KeyDerivationPrf.HMACSHA1,
            iterationCount: 10000,
            numBytesRequested: 256 / 8));
        Console.WriteLine($"Hashed: {hashed}");
    }
}
 
/*
 * SAMPLE OUTPUT
 *
 * Enter a password: Xtw9NMgx
 * Salt: NZsP6NnmfBuYeJrrAKNuVQ==
 * Hashed: /OOoOer10+tGwTRDTrQSoeCxVTFr6dtYly7d0cPxIak=
 */

有关实际用例, 请参阅 ASP.NET Core PasswordHasher标识的源代码

上一篇:目的层次结构和 ASP.NET Core 中的多租户

下一篇:限制在 ASP.NET Core 的受保护负载的生存期

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程