Create Password Hash
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.ComponentModel;
namespace CryptoUtils {
/// <summary>
/// Cryptography helper class
/// </summary>
public class Cryptography {
/// <summary>
/// Hash algorithm enum
/// </summary>
public enum HashType : short {
[DescriptionAttribute( "SHA1CryptoServiceProvider" )]
SHA1 = 0,
[DescriptionAttribute( "SHA256Managed" )]
SHA256 = 1,
[DescriptionAttribute( "SHA384Managed" )]
SHA384 = 2,
[DescriptionAttribute( "SHA512Managed" )]
SHA512 = 3,
[DescriptionAttribute( "MD5CryptoServiceProvider" )]
MD5 = 4
}
/// <summary>
/// Creates a random salt to add to a password.
/// </summary>
/// <returns></returns>
public static string CreateSalt( ) {
RandomNumberGenerator rng = RandomNumberGenerator.Create( );
byte[ ] number = new byte[ 32 ];
rng.GetBytes( number );
return Convert.ToBase64String( number );
}
/// <summary>
/// Creates the password hash using a given HashType algoritm.
/// </summary>
/// <param name="salt">The salt.</param>
/// <param name="password">The password.</param>
/// <param name="hashType">Type of the hash.</param>
/// <returns></returns>
public static string CreatePasswordHash( string salt, string password, HashType hashType ) {
string hashString = string.Empty;
if ( !string.IsNullOrEmpty( password ) ) {
HashAlgorithm hashAlg = HashAlgorithm.Create( hashType.ToString( ) );
byte[ ] pwordData = Encoding.Default.GetBytes( salt + password );
byte[ ] hash = hashAlg.ComputeHash( pwordData );
hashString = Convert.ToBase64String( hash );
}
return hashString;
}
/// <summary>
/// Creates the password hash using SHA256 managed hash algoritm.
/// </summary>
/// <param name="salt">The password salt.</param>
/// <param name="password">The password.</param>
/// <returns></returns>
public static string CreatePasswordHash( string salt, string password ) {
return CreatePasswordHash( salt, password, HashType.SHA256 );
}
/// <summary>
/// Encrypts the password.
/// </summary>
/// <param name="password">The password.</param>
/// <param name="salt">The salt.</param>
/// <returns></returns>
public static string EncryptPassword( string password, out string salt ) {
salt = CreateSalt( );
return CreatePasswordHash( salt, password );
}
}
}
Related examples in the same category