Я предполагаю, что вы используете более новую версию библиотеки bcrypt https://www.nuget.org/packages/BCrypt.Net-Next/, а не старую с ошибками.
Во-первых, не вырабатывайте соль самостоятельно, это обсуждается в библиотеке.
Вы можете безопасно создать новый хэш пароля, просто набрав
var myNewHash = BCrypt.ValidateAndReplacePassword(currentPassword, currentHash, newPassword);
Это, конечно, вынуждает процесс требовать, чтобы пользователь ввел свой текущий пароль, чтобы изменить свой пароль (это лучшая практика).
Если вы делаете это в смысле сброса пароля, вы должны хешировать пароль, используя
var myNewHash = BCrypt.HashPassword("newpassword");
Как указано в начале readme https://github.com/BcryptNet/bcrypt.net
Что касается элемента SQL; Я бы подумал об использовании EF или Dapper.Net поверх прямых манипуляций с ADO. Параметризация SQL не является надежной защитой от SQLI Примеры внедрения SQL даже при использовании SQLParameter в .NET?
Если вы используете ADO, убедитесь, что вы указали типы параметров ala
var connect = ConfigurationManager.ConnectionStrings["NorthWind"].ToString();
var query = "Select * From Products Where ProductID = @ProductID";
using (var conn = new SqlConnection(connect))
{
using (var cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add("@ProductID", SqlDbType.Int);
cmd.Parameters["@ProductID"].Value = Convert.ToInt32(Request["ProductID"]);
conn.Open();
conn.Open();
//Process results
}
}
Отказ от ответственности: я являюсь автором указанного репо
Пример кода для ADO от https://www.mikesdotnetting.com/article/113/preventing-sql-injection-in-asp-net