Hesla hash v ASP.NET Core
Základ kódu ochrany dat zahrnuje balíček Microsoft. AspNetCore. Cryptography. Key, který obsahuje funkce odvození kryptografického klíče. Tento balíček je samostatná součást a nemá žádné závislosti na zbytku systému ochrany dat. Dá se použít zcela nezávisle. Zdroj existuje společně se základem kódu ochrany dat jako pohodlí.
Balíček aktuálně nabízí metodu KeyDerivation.Pbkdf2 , která umožňuje hash hesla pomocí algoritmu PBKDF2. toto rozhraní API je velmi podobné .NET Framework existujícímu typu Rfc2898DeriveBytes, ale existují tři důležité odlišnosti:
KeyDerivation.Pbkdf2Metoda podporuje využívání více PRFs (aktuálněHMACSHA1,HMACSHA256aHMACSHA512), zatímcoRfc2898DeriveBytesTyp podporuje pouzeHMACSHA1.KeyDerivation.Pbkdf2Metoda zjistí aktuální operační systém a pokusí se zvolit optimalizovanou implementaci rutiny, která poskytuje mnohem lepší výkon v některých případech. (na Windows 8 nabízí 10x propustnostRfc2898DeriveBytes.)KeyDerivation.Pbkdf2Metoda vyžaduje, aby volající určil všechny parametry (Salt, PRF a Count iterace).Rfc2898DeriveBytesTyp poskytuje výchozí hodnoty pro tyto.
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=
*/
Podívejte se na zdrojový kód ASP.NET Core Identity PasswordHasher typu pro reálný případ použití.