using API.Hashing.Interfaces; using System.Security.Cryptography; using System.Text; namespace API.Hashing { public class Pbkdf2 : IHashingAlgorithm { private const int KeySize = 512; private const int Iterations = 250000; private readonly HashAlgorithmName _algorithmName = HashAlgorithmName.SHA512; public string hash(string password, out byte[] salt) { salt = RandomNumberGenerator.GetBytes(KeySize); byte[] hash = Rfc2898DeriveBytes.Pbkdf2(Encoding.UTF8.GetBytes(password), salt, Iterations, _algorithmName, KeySize); return Convert.ToHexString(hash); } public string hash(string password, byte[] salt) { byte[] hash = Rfc2898DeriveBytes.Pbkdf2(Encoding.UTF8.GetBytes(password), salt, Iterations, _algorithmName, KeySize); return Convert.ToHexString(hash); } } }