|
using System;
using System.Text;
using System.Security.Cryptography;
namespace IssueVision.Data.Web
{
public class HashHelper
{
/// <summary>
/// Create random salt
/// </summary>
/// <returns></returns>
public static string CreateRandomSalt()
{
Byte[] saltBytes = new Byte[4];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(saltBytes);
return Convert.ToBase64String(saltBytes);
}
/// <summary>
/// Compute salted password hash
/// </summary>
/// <param name="password"></param>
/// <param name="salt"></param>
/// <returns></returns>
public static string ComputeSaltedHash(string password, string salt)
{
// Create Byte array of password string
UnicodeEncoding encoder = new UnicodeEncoding();
Byte[] secretBytes = encoder.GetBytes(password);
// Create a new salt
Byte[] saltBytes = Convert.FromBase64String(salt);
// append the two arrays
Byte[] toHash = new Byte[secretBytes.Length + saltBytes.Length];
Array.Copy(secretBytes, 0, toHash, 0, secretBytes.Length);
Array.Copy(saltBytes, 0, toHash, secretBytes.Length, saltBytes.Length);
SHA512 sha512 = SHA512.Create();
Byte[] computedHash = sha512.ComputeHash(toHash);
return Convert.ToBase64String(computedHash);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Weidong has been an information system professional since 1990. He has a Master's degree in Computer Science, and is currently a MCSD .NET