ASP.NET Core 'de karma parolalar

Veri koruma kodu tabanı, şifreleme anahtar türetme işlevlerini içeren Microsoft. AspNetCore. Cryptography. Keytüretme paketini içerir. Bu paket tek başına bir bileşendir ve veri koruma sisteminin geri kalanı üzerinde hiçbir bağımlılığı yoktur. Tamamen bağımsız olarak kullanılabilir. Kaynak, bir kolaylık olarak veri koruma kodu tabanının yanında bulunur.

Paket şu anda KeyDerivation.Pbkdf2 PBKDF2 algoritmasınıkullanarak bir parolayı karma olarak sağlayan bir yöntem sunmaktadır. bu apı .NET Framework var olan Rfc2898DeriveBytes türüneçok benzer, ancak üç önemli ayrımlar vardır:

  1. KeyDerivation.Pbkdf2Yöntemi birden çok PRFs (Şu anda HMACSHA1 , ve) kullanmayı destekler HMACSHA256 HMACSHA512 , ancak Rfc2898DeriveBytes tür yalnızca destekler HMACSHA1 .

  2. KeyDerivation.Pbkdf2Yöntemi, geçerli işletim sistemini algılar ve yordamın en iyi duruma getirilmiş uygulamasını seçme girişimlerini, belirli durumlarda çok daha iyi performans sağlar. (Windows 8, üretilen iş 10 ' un etrafında Rfc2898DeriveBytes .)

  3. KeyDerivation.Pbkdf2Yöntemi, çağıranın tüm parametreleri (anahtar, prf ve yineleme sayısı) belirtmesini gerektirir. Rfc2898DeriveBytesTürü bunlar için varsayılan değerleri sağlar.

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 cryptographically strong random sequence of nonzero values
        byte[] salt = new byte[128 / 8];
        using (var rngCsp = new RNGCryptoServiceProvider())
        {
            rngCsp.GetNonZeroBytes(salt);
        }
        Console.WriteLine($"Salt: {Convert.ToBase64String(salt)}");

        // derive a 256-bit subkey (use HMACSHA256 with 100,000 iterations)
        string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
            password: password,
            salt: salt,
            prf: KeyDerivationPrf.HMACSHA256,
            iterationCount: 100000,
            numBytesRequested: 256 / 8));
        Console.WriteLine($"Hashed: {hashed}");
    }
}

/*
 * SAMPLE OUTPUT
 *
 * Enter a password: Xtw9NMgx
 * Salt: CGYzqeN4plZekNC88Umm1Q==
 * Hashed: Gt9Yc4AiIvmsC1QQbe2RZsCIqvoYlst2xbz0Fs8aHnw=
 */

ASP.NET Core Identity PasswordHasher Gerçek dünya kullanım örneği için bkz. kaynak kodu.