BCrypt хэшированный пароль урезан в базе данных
Я использую.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 ответ
Решение
- Пожалуйста, проверьте длину входного параметра пароля, используемого в хранимой процедуре...
- Пожалуйста, проверьте длину вашего параметра для пароля, используемого в функции 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();
}
}
Примечание. Если явно не указано, размер определяется исходя из фактического размера указанного значения параметра.