Files
Sean e2331010f1
Some checks failed
Build .NET Project / build (push) Has been cancelled
Refactor deployment script and replace RNGCryptoServiceProvider
2026-03-13 18:04:52 -04:00

68 lines
2.7 KiB
C#
Executable File

using System;
using System.Security.Cryptography;
using System.Text;
namespace MarketData.Security
{
public class Encryption
{
public static string HashPassword(string password)
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] bytes = Encoding.UTF8.GetBytes(password);
byte[] hashBytes = sha256.ComputeHash(bytes);
return Convert.ToBase64String(hashBytes);
}
}
// public static (string Salt, string Hash) HashPasswordWithSalt(string password)
// {
// using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
// {
// byte[] salt = new byte[16];
// rng.GetBytes(salt);
// using (SHA256 sha256 = SHA256.Create())
// {
// byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
// byte[] saltedPassword = new byte[passwordBytes.Length + salt.Length];
// Buffer.BlockCopy(passwordBytes, 0, saltedPassword, 0, passwordBytes.Length);
// Buffer.BlockCopy(salt, 0, saltedPassword, passwordBytes.Length, salt.Length);
// byte[] hashBytes = sha256.ComputeHash(saltedPassword);
// return (Convert.ToBase64String(salt), Convert.ToBase64String(hashBytes));
// }
// }
// }
public static (string Salt, string Hash) HashPasswordWithSalt(string password)
{
byte[] salt = new byte[16];
RandomNumberGenerator.Fill(salt);
using (SHA256 sha256 = SHA256.Create())
{
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
byte[] saltedPassword = new byte[passwordBytes.Length + salt.Length];
Buffer.BlockCopy(passwordBytes, 0, saltedPassword, 0, passwordBytes.Length);
Buffer.BlockCopy(salt, 0, saltedPassword, passwordBytes.Length, salt.Length);
byte[] hashBytes = sha256.ComputeHash(saltedPassword);
return (Convert.ToBase64String(salt), Convert.ToBase64String(hashBytes));
}
}
public static bool VerifyPassword(string inputPassword, string storedSalt, string storedHash)
{
byte[] salt = Convert.FromBase64String(storedSalt);
byte[] passwordBytes = Encoding.UTF8.GetBytes(inputPassword);
byte[] saltedPassword = new byte[passwordBytes.Length + salt.Length];
Buffer.BlockCopy(passwordBytes, 0, saltedPassword, 0, passwordBytes.Length);
Buffer.BlockCopy(salt, 0, saltedPassword, passwordBytes.Length, salt.Length);
using (SHA256 sha256 = SHA256.Create())
{
byte[] hashBytes = sha256.ComputeHash(saltedPassword);
string inputHash = Convert.ToBase64String(hashBytes);
return inputHash == storedHash;
}
}
}
}