using System.Security.Cryptography;
public static void Main()
var saltedPassword = GenerateSaltedHashSHA256(UnicodeEncoding.Unicode.GetBytes("Password1!"), Convert.FromBase64String("gJBn9B+GmsPHTYgaP/PzhQ=="));
Console.WriteLine(Convert.ToBase64String(saltedPassword));
private static byte[] GenerateSaltedHashSHA256(byte[] plainText, byte[] salt, DateTime? passwordDate = null)
HashAlgorithm algorithm = new SHA256Managed();
byte[] plainTextWithSaltBytes =
new byte[plainText.Length + salt.Length];
for (int i = 0; i < plainText.Length; i++)
plainTextWithSaltBytes[i] = plainText[i];
for (int i = 0; i < salt.Length; i++)
plainTextWithSaltBytes[plainText.Length + i] = salt[i];
if (passwordDate != null)
TimeSpan span = passwordDate.Value.Subtract(new DateTime(2006, 5, 27));
int count = (span.Days / 30) + (span.Days % 30) * 40 + 1;
plainTextWithSaltBytes = algorithm.ComputeHash(plainTextWithSaltBytes);
return plainTextWithSaltBytes;
return algorithm.ComputeHash(plainTextWithSaltBytes);