38 lines
1.3 KiB
C#
38 lines
1.3 KiB
C#
using System;
|
|
using System.Security.Cryptography;
|
|
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
|
|
namespace rockfishCore.Util
|
|
{
|
|
//Authentication controller
|
|
public static class Hasher
|
|
{
|
|
|
|
public static string hash(string Salt, string Password)
|
|
{
|
|
|
|
//adapted from here:
|
|
//https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/consumer-apis/password-hashing
|
|
string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
|
|
password: Password,
|
|
salt: StringToByteArray(Salt),
|
|
prf: KeyDerivationPrf.HMACSHA512,
|
|
iterationCount: 10000,
|
|
numBytesRequested: 512 / 8));
|
|
return hashed;
|
|
}
|
|
|
|
|
|
|
|
//https://stackoverflow.com/questions/311165/how-do-you-convert-a-byte-array-to-a-hexadecimal-string-and-vice-versa/24343727#24343727
|
|
public static byte[] StringToByteArray(String hex)
|
|
{
|
|
int NumberChars = hex.Length;
|
|
byte[] bytes = new byte[NumberChars / 2];
|
|
for (int i = 0; i < NumberChars; i += 2)
|
|
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
|
|
return bytes;
|
|
}
|
|
|
|
}//eoc
|
|
|
|
}//eons |