附近的语法不正确。在 sql 服务器中插入加密密码 (md5) 时出现异常?



我正在使用md5安全性加密密码并将其存储在 asp.net 数据库中,但它给了我">'附近语法不正确的例外。我使用二进制(16)数据类型来存储加密密码。

query = "insert into accounts(email, password, user_type) output inserted.id values('" + clientBLL.email + "', " + clientBLL.password + ", 0);";
string accountId = DBManager.ExecuteScaler(query);

当我在密码"' " + signIn.password + " ' ">周围加上单引号时,它给了我不允许从数据类型 varchar 隐式转换为二进制。使用 CONVERT 函数运行此查询错误。我应该怎么做才能将 md5 加密密码存储到数据库中。

加密的密码代码。

public static string encryptMd5(string textToEncrypt)
{
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
md5.ComputeHash(Encoding.ASCII.GetBytes(textToEncrypt));
byte[] result = md5.Hash;
StringBuilder str = new StringBuilder();
for (int i = 1; i < result.Length; i++)
{
str.Append(result[i].ToString("x2"));
}
return str.ToString();
}
}

请注意评论以这种方式生成SQL的极其糟糕的做法。您当前的实现很容易受到 SQL 注入攻击。而是遵循以下代码中的模式。

话虽如此,异常告诉您使用convert

using (SqlCommand dbCommand = new SqlCommand(@"insert into accounts(email,  
password, user_type) output inserted.id 
values(@username, convert(varbinary, @password),
@userType)", dbConn))
{
dbCommand.Parameters.Add("username", SqlType.VarChar).Value = clientBLL.email;
dbCommand.Parameters.Add("password", SqlType.VarBinary).Value = clientBLL.password;
dbCommand.Parameters.Add("userType", SqlType.Int).Value = 0;
dbCommand.ExecuteNonQuery();
}

最新更新