AS400_API_DOTNET/Auth/PasswordHasher.cs
2025-10-17 16:01:56 +07:00

28 lines
1.0 KiB
C#

using System;
using System.Security.Cryptography;
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
namespace AS400API.Auth;
public static class PasswordHasher
{
private const int SaltSize = 16;
private const int KeySize = 32;
private const int Iterations = 100_000;
public static (string Hash, string Salt) HashPassword(string password)
{
var salt = RandomNumberGenerator.GetBytes(SaltSize);
var hashBytes = KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA256, Iterations, KeySize);
return (Convert.ToBase64String(hashBytes), Convert.ToBase64String(salt));
}
public static bool Verify(string password, string storedHash, string storedSalt)
{
var saltBytes = Convert.FromBase64String(storedSalt);
var computedBytes = KeyDerivation.Pbkdf2(password, saltBytes, KeyDerivationPrf.HMACSHA256, Iterations, KeySize);
var storedBytes = Convert.FromBase64String(storedHash);
return CryptographicOperations.FixedTimeEquals(storedBytes, computedBytes);
}
}