2016-09-13 8 views
-1

Используя следующее сообщение, вы можете зашифровать входную строку с помощью bcrypt.Как проверить входы с помощью CryptSharp?

public static string CreatePassword(string password) 
{ 
    // no need to provide a Salt value since bcrypt does that automatically 
    byte[] PasswordBytes = Encoding.ASCII.GetBytes(password); 

    return Crypter.Blowfish.Crypt(PasswordBytes); 
} 

Это использует CryptSharp, который является удивительным, но как проверить ввод пользователя с хэш возвращенного этой функцией?

Я не могу найти функцию в библиотеке, чтобы сделать это.

Лучший способ, которым я могу думать, чтобы сделать это следующим:

public static bool ValidatePassword(string password, string passwordHash) 
{ 
    // crypt the entered password 
    string Crypted = Crypter.Blowfish.Crypt(Encoding.ASCII.GetBytes(password)); 

    // compare the crypted password against the value in the database 
    if (String.Compare(Crypted, passwordHash, false) != 0) return false; 

    return true; 
} 

Единственная проблема состоит в том, что значение соли не будет таким же, и поэтому значения почти всегда не согласны.

+0

Почему вы не используете один и тот же соль для ввода и сохраненный пароль –

ответ

0

Соль должна быть уникальной. чтобы избежать взлома паролей базы данных для одних и тех же паролей. Вы должны хранить соль с паролем, и если пользователь входит в систему, вы должны проверить входные данные пользователя и пароль с помощью той же соли

Во втором аргументе вы можете дать обычай соль

string salt = Crypter.Blowfish.GenerateSalt(20); 
Crypter.Blowfish.Crypt(PasswordBytes,salt); 

для Validate вы можете использовать этот

public static bool ValidatePassword(string inputPassword, string storedPassword, string salt) 
     { 
      // crypt the entered password and stored password 
      string CryptedInput = Crypter.Blowfish.Crypt(Encoding.ASCII.GetBytes(inputPassword), salt); 
      string CryptedPassword = Crypter.Blowfish.Crypt(Encoding.ASCII.GetBytes(storedPassword), salt); 

      // compare the crypted passwords 
      return string.Equals(CryptedInput, CryptedPassword); 
     } 
+1

или использовать 'вар соль = Crypter.Blowfish.GenerateSalt (6)' – stuartd

+0

Я уже обновил –

+0

мысль Bcrypt генерирует его собственная соль val хотя? В любом случае, это касается проблемы с солью, но как насчет проверки пароля, введенного против того, что хранится? – Ortund