Mega Code Archive

 
Categories / C# / Security
 

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 );     }   } }