BCrypt хэшированный пароль урезан в базе данных - PullRequest
0 голосов
/ 14 февраля 2012

Я использую .Net реализацию BCrypt для хранения паролей в базе данных. Столбец пароля - VARCHAR (MAX)

Это код, который обновляет пароль с помощью хранимой процедуры:

Update [User] 
Set [Password]= @NewPassword, 
ModifiedOn = GetDate(),
ModifiedBy = 'PasswordChanger'
Where [UserName] = @UserName

Для некоторых пользователей пароль усекается. Пример после усечения: $ 2a $ 12 $ XM2

Это не всегда так.

Пожалуйста, помогите мне понять, что может вызвать усечение?

ОБНОВЛЕНИЕ:

Вот код C #, который вызывает SP для обновления пароля:

string HashedPassword;
int NumberOfRowsAffected;
try
            {
                Database jss = DatabaseFactory.CreateDatabase();
                HashedPassword = BCrypt.HashPassword(txtPassword.Text, BCrypt.GenerateSalt(12));
                NumberOfRowsAffected = jss.ExecuteNonQuery("procUpdatePassword", GetLogin(HttpContext.Current.User.Identity), HashedPassword);
                if (NumberOfRowsAffected > 0)
                    lblStatus.Text = "Password updated.";
                else
                {
                    lblStatus.Text = "Password not updated for this user.";
                }

            }
            catch (Exception ex)
            {
                lblStatus.Text = "Password was not changed due to an error.";
                lblStatus.Text += ex.ToString();
            }

1 Ответ

1 голос
/ 14 февраля 2012
  1. Пожалуйста, проверьте длину вашего входного параметра пароля, используемого в хранимой процедуре ...
  2. Пожалуйста, проверьте длину вашего параметра для пароля, используемого в функции C #, перед вызовом создания запроса к базе данных..

Наконец, обе стороны должны быть синхронизированы со схемой таблицы.


Пример кода ...

using (SqlConnection con = new SqlConnection("Your Connection String"))
{
    using (SqlCommand cmd = new SqlCommand("Your Stored Procedure Name", con))
    {
        SqlParameter param = new SqlParameter();
        param.ParameterName = "Parameter Name";
        param.Value = "Value";
        param.SqlDbType = SqlDbType.VarChar;
        param.Direction = ParameterDirection.Input;
        cmd.Parameters.Add(param);
        cmd.ExecuteNonQuery();
    }
}

Примечание - Если явно не установлено, размер выводится из фактического размера указанного значения параметра.

...