Create hash generator with configurable hash algorithm. Also need method to create salt. Implemented in visual studio 2015. Must work in DNX Core 5.0.
public class HashGenerator : IHashGenerator
{
// Algorithm has to inherit from HashAlgorithm base class.
// For example, another algorithm that can be used is: "System.Security.Cryptography.MD5";
private const string HashAlgorithmName = "System.Security.Cryptography.SHA256";
public string GenerateHash(string input, string salt)
{
var saltedPassword = Encoding.UTF8.GetBytes($"{input}{salt}");
var hashAlgorithm = GetHashAlgorithm();
var hashedPassword = hashAlgorithm.ComputeHash(saltedPassword);
return Convert.ToBase64String(hashedPassword);
}
public string CreateSalt()
{
var buffer = new byte[25];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(buffer);
}
return Convert.ToBase64String(buffer);
}
private HashAlgorithm GetHashAlgorithm()
{
var typeInfo = Type.GetType(HashAlgorithmName).GetTypeInfo();
var createMethod = typeInfo.GetDeclaredMethods("Create").First(f => f.GetParameters().Count() == 0);
var hashAlgorithm = (HashAlgorithm)createMethod.Invoke(null, null);
return hashAlgorithm;
}
}