mirror of
https://github.com/hmaxnl/SharpRSS.git
synced 2024-09-20 01:54:20 +02:00
34 lines
1.1 KiB
C#
34 lines
1.1 KiB
C#
|
using System;
|
||
|
using System.Linq;
|
||
|
using System.Security.Cryptography;
|
||
|
using System.Text;
|
||
|
|
||
|
namespace SharpRSS.API.Cryptography
|
||
|
{
|
||
|
public static class Hasher
|
||
|
{
|
||
|
private const int KeySize = 128;
|
||
|
private const int Iterations = 420069;
|
||
|
static readonly HashAlgorithmName Algorithm = HashAlgorithmName.SHA512;
|
||
|
|
||
|
public static byte[] HashPassword(string password, out byte[] salt)
|
||
|
{
|
||
|
salt = RandomNumberGenerator.GetBytes(KeySize);
|
||
|
return HashInternal(password, salt);
|
||
|
}
|
||
|
|
||
|
public static bool ComparePasswords(string password, byte[] hash, byte[] salt)
|
||
|
{
|
||
|
byte[] passwordHashed = HashInternal(password, salt);
|
||
|
if (hash.Length != passwordHashed.Length)
|
||
|
return false;
|
||
|
return !hash.Where((t, i) => t != passwordHashed[i]).Any();
|
||
|
}
|
||
|
|
||
|
private static byte[] HashInternal(string password, byte[] salt)
|
||
|
{
|
||
|
var hash = Rfc2898DeriveBytes.Pbkdf2(Encoding.UTF8.GetBytes(password), salt, Iterations, Algorithm,KeySize);
|
||
|
return hash;
|
||
|
}
|
||
|
}
|
||
|
}
|