ASP.NET Core'da karma parolalar
Bu makalede PBKDF2 algoritmasını KeyDerivation.Pbkdf2
kullanarak parola karmasına izin veren yönteminin nasıl çağrıldığı gösterilmektedir.
Uyarı
KeyDerivation.Pbkdf2
API, düşük düzeyli bir şifreleme temelidir ve uygulamaları mevcut bir protokol veya şifreleme sistemiyle tümleştirmek için kullanılması amaçlanmıştır. KeyDerivation.Pbkdf2
parola tabanlı oturum açmayı destekleyen ve karma parolaları bir veri deposunda depolaması gereken yeni uygulamalarda kullanılmamalıdır. Yeni uygulamalar kullanmalıdır PasswordHasher
. hakkında PasswordHasher
daha fazla bilgi için bkz . ASP.NET Çekirdek Identity Parolasını KeşfetmeHasher.
Veri koruma kod tabanı, şifreleme anahtarı türetme işlevlerini içeren bir NuGet paketi Microsoft.AspNetCore.Cryptography.KeyDerivation içerir. Bu paket tek başına bir bileşendir ve veri koruma sisteminin bağımlılığı rest yoktur. Bağımsız olarak kullanılabilir. Kaynak, kolaylık sağlamak için veri koruma kod tabanıyla birlikte bulunur.
Uyarı
Aşağıdaki kod, paylaşılan gizli anahtar oluşturmak için nasıl kullanılacağını KeyDerivation.Pbkdf2
gösterir. Veri deposundaki depolama için parola karması yapmak için kullanılmamalıdır.
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
using System.Security.Cryptography;
Console.Write("Enter a password: ");
string? password = Console.ReadLine();
// Generate a 128-bit salt using a sequence of
// cryptographically strong random bytes.
byte[] salt = RandomNumberGenerator.GetBytes(128 / 8); // divide by 8 to convert bits to bytes
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=
*/
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=
*/
Not
.NET başvuru kaynağına yönelik belge bağlantıları genellikle deponun varsayılan dalını yükler ve bu dal .NET'in sonraki sürümü için geçerli geliştirmeyi temsil eder. Belirli bir sürümün etiketini seçmek için Dalları veya etiketleri değiştir açılan listesini kullanın. Daha fazla bilgi için bkz. ASP.NET Core kaynak kodunun sürüm etiketini seçme (dotnet/AspNetCore.Docs #26205).
ASP.NET Core