using System.Security.Cryptography;
static void Main(string[] args)
string password = "Password123";
string salt = GenerateSalt();
string hashedPassword = HashWithSalt(password, salt);
Console.WriteLine($"Salt: {salt}");
Console.WriteLine($"Password: {password}");
Console.WriteLine($"Hashed Password: {hashedPassword}");
string inputPassword = "Password123";
bool isVerified = VerifyPassword(inputPassword, salt, hashedPassword);
Console.WriteLine($"Password Verified: {isVerified}");
public static string GenerateSalt(int size = 16)
var saltBytes = new byte[size];
using (var rng = new RNGCryptoServiceProvider())
return Convert.ToBase64String(saltBytes);
public static string HashWithSalt(string input, string saltBase64)
byte[] saltBytes = Convert.FromBase64String(saltBase64);
byte[] passwordBytes = Encoding.UTF8.GetBytes(input);
byte[] combinedBytes = new byte[passwordBytes.Length + saltBytes.Length];
Buffer.BlockCopy(passwordBytes, 0, combinedBytes, 0, passwordBytes.Length);
Buffer.BlockCopy(saltBytes, 0, combinedBytes, passwordBytes.Length, saltBytes.Length);
using (SHA256 sha256 = SHA256.Create())
byte[] hashBytes = sha256.ComputeHash(combinedBytes);
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
public static bool VerifyPassword(string inputPassword, string saltBase64, string storedHashedPassword)
string computedHash = HashWithSalt(inputPassword, saltBase64);
return storedHashedPassword == computedHash;