29 lines
808 B
C#
29 lines
808 B
C#
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);
|
|
}
|
|
}
|
|
}
|