using Microsoft.AspNetCore.Cryptography.KeyDerivation;
using System.Security.Cryptography;
public static void Main()
string hashed = CredentialEncryptionService.GenerateHashFromUnencryptedPassword(RandomString(12));
Console.WriteLine($"Hashed key: {hashed}");
Console.WriteLine($"Is ASCII? {IsAsciiString(hashed)}");
Console.WriteLine($"String length: {hashed.Length}");
Console.WriteLine($"Bits: {GetBits(hashed).Length}");
private static Random random = new Random();
public static string RandomString(int length)
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_!@#$%^&*()";
return new string (Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
private static bool IsAsciiString(string s)
throw new ArgumentNullException("s");
public static string GetBits(string input)
StringBuilder sb = new StringBuilder();
foreach (byte b in Encoding.ASCII.GetBytes(input))
sb.Append(Convert.ToString(b, 2));
public static class CredentialEncryptionService
public static string GenerateHashFromUnencryptedPassword(string plainTextPassword)
byte[] salt = new byte[128 / 8];
using (var rngCsp = new RNGCryptoServiceProvider())
rngCsp.GetNonZeroBytes(salt);
string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(password: plainTextPassword, salt: salt, prf: KeyDerivationPrf.HMACSHA256, iterationCount: 100000, numBytesRequested: 256 / 8));