using System.Security.Cryptography;
public static void Main()
var salt = GenerateSalt(16);
Console.WriteLine("salt = " + salt);
var hash = GenerateHash(password + salt);
Console.WriteLine("hash = " + hash);
static string GenerateHash(string data)
byte[] bytes = Encoding.UTF8.GetBytes(data);
SHA512 shaM = new SHA512Managed();
result = shaM.ComputeHash(bytes);
return GetStringFromHash(result);
static string GenerateSalt(int length)
RNGCryptoServiceProvider p = new RNGCryptoServiceProvider();
var salt = new byte[length];
return GetStringFromHash(salt);
static string GetStringFromHash(byte[] hash)
StringBuilder result = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
result.Append(hash[i].ToString("X2"));
return result.ToString();