48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
|
|
using System.Collections.ObjectModel;
|
|
using System.Security.Cryptography;
|
|
|
|
//-- The example by folow microsoft example: ---------------------------------------------------
|
|
//-- https://docs.asp.net/en/latest/security/data-protection/consumer-apis/password-hashing.html
|
|
//----------------------------------------------------------------------------------------------
|
|
|
|
namespace Knoks.Framework.Cryptography
|
|
{
|
|
public class PasswordProcess : IPasswordProcess
|
|
{
|
|
public readonly IPasswordOptions PasswordOptions;
|
|
|
|
public PasswordProcess(IPasswordOptions passwordOptions)
|
|
{
|
|
PasswordOptions = passwordOptions;
|
|
}
|
|
|
|
public IPasswordResult Generate(string password, byte[] salt)
|
|
{
|
|
return new PasswordResult
|
|
(
|
|
PasswordOptions.Version,
|
|
KeyDerivation.Pbkdf2(
|
|
password: password + PasswordOptions.Peper,
|
|
salt: salt,
|
|
prf: PasswordOptions.Prf,
|
|
iterationCount: PasswordOptions.IterationCount,
|
|
numBytesRequested: PasswordOptions.NumBytesRequested
|
|
),
|
|
salt
|
|
);
|
|
}
|
|
|
|
public IPasswordResult Generate(string password)
|
|
{
|
|
var salt = new byte[128 / 8];
|
|
using (var rng = RandomNumberGenerator.Create())
|
|
{
|
|
rng.GetBytes(salt);
|
|
}
|
|
|
|
return Generate(password, salt);
|
|
}
|
|
}
|
|
}
|