41 lines
996 B
C#
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);
|
|
}
|
|
}
|
|
}
|