Knocks/BackEnd/Knoks.Framework/Cryptography/PasswordProcess.cs

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);
}
}
}