コード例 #1
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="password"></param>
 /// <param name="algorithm"></param>
 /// <param name="salt">De te gebruiken salt, welke minimaal uit 16 karakters dient te bestaan</param>
 /// <param name="key">De primaire (master) sleutel waarmee de hash gegenereerd dient te worden</param>
 /// <returns></returns>
 public static PasswordResult HashPassword(string password, EnmSecureHashingAlgorithm algorithm, string salt, string key)
 {
     // Controleer parameters
     if (String.IsNullOrEmpty(password))
         throw new ArgumentNullException("password");
     if (salt == null || salt.Length < SALT_LENGTH)
         throw new ArgumentException("Must be atleast " + SALT_LENGTH.ToString() + " characters in length", "salt");
     if (key == null || key.Length < MIN_SECRETKEY_LENGTH)
         throw new ArgumentException("Must be atleast " + MIN_SECRETKEY_LENGTH.ToString() + " characters in length", "masterKey");
     // Genereer een salt en converteer het wachtwoord naar bytes
     var factory = HMACFactories.HMACSHA512;
     var saltBytes = Encoding.ASCII.GetBytes(salt);
     var passwordBytes = Encoding.ASCII.GetBytes(password);
     var generatedHash = new PBKDF2(factory, passwordBytes, saltBytes, HASH_ITERATIONS).GetBytes(64);
     return new PasswordResult(algorithm.ToString(), HASH_ITERATIONS, Convert.ToBase64String(saltBytes), Convert.ToBase64String(generatedHash));
 }
コード例 #2
0
        /// <summary>
        /// Valideer of een wachtwoord geldig is door deze met de ingevoerde parameters te vergelijken.
        /// </summary>
        /// <param name="password">Het plain text wachtwoodr dat vergeleken moet worden met de secure hash</param>
        /// <param name="method">Het te gebruiken hashing algorithme</param>
        /// <param name="salt">Base-64 Encoded salt (gegenereerd met de methode HashPassword)</param>
        /// <param name="iteraties">Het aantal hashing iteraties</param>
        /// <param name="passwordHash">Base-64 Encoded password hash(Zoals gegenereerd uit de methode HashPassword)</param>
        /// <returns>True indien het wachtwoord overeen komt met de secure hash</returns>
        public static bool ValidatePasswordHash(string password, EnmSecureHashingAlgorithm method, string salt, int iteraties, string passwordHash)
        {
            // Valideer input
            if (String.IsNullOrEmpty(password))
                throw new ArgumentNullException("password");
            if (iteraties < 1)
                throw new ArgumentNullException("Value must be greater then 0", "iteraties");
            if (String.IsNullOrEmpty(salt))
                throw new ArgumentNullException("salt");
            if (String.IsNullOrEmpty(passwordHash))
                throw new ArgumentNullException("passwordHash");

            // Bereid de parameters voor op gebruik
            var factory = method.Factory(); // De te gebruiken HMACSHA algoritme
            var passwordBytes = Convert.FromBase64String(password); // Het te valideren wachtwoor als bytes
            var saltBytes = Convert.FromBase64String(salt); // Het te valideren wachtwoor als bytes
            var generatedHash = new PBKDF2(factory, passwordBytes, saltBytes, iteraties).GetBytes(64);

            // Slow compare
            return SlowEquals(generatedHash, Convert.FromBase64String(passwordHash));
        }