Files
2020-03-01 18:45:03 +01:00

41 lines
996 B
C#

using Microsoft.AspNetCore.Cryptography.KeyDerivation;
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
namespace ReallifeGamemode.Server.Common
{
public class PasswordHasher
{
public static byte[] GetNewSalt(int length = 256)
{
if ((length % 8) != 0)
{
throw new ArgumentException("Length mus be completely divisble through 8");
}
var salt = new byte[length / 8];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(salt);
}
return salt;
}
public static string HashPassword(string password, byte[] salt, int length = 512)
{
if ((length % 8) != 0)
{
throw new ArgumentException("Length mus be completely divisble through 8");
}
var hashedPassword = KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA512, 50000, length / 8);
return Convert.ToBase64String(hashedPassword);
}
}
}