我想知道如何让我的小程序工作。我需要的是当我输入密码 Password321!以与Password
列下的MS SQL数据库中的散列密码进行比较时,我尝试使用{{1但它对我没有用。它出现错误,指出将nvarchar值'nEg5JzRQHD8P7VOwwIkeaDx6WEs ='转换为数据类型int时转换失败。
这是我的代码:
PWDCOMPARE('Password321!', Password);
请帮助,
由于
中号
答案 0 :(得分:2)
对于SQL Server
,如果给定的密码mataces else返回PWDCOMPARE()
,则1
返回int值0
<强> PWDCOMPARE 强>
Hashes a password and compares the hash to the hash of an existing password.
<强>语法:强>
PWDCOMPARE ( 'clear_text_password', password_hash [ , version ] )
如果clear_text_password的哈希值与password_hash参数匹配,则返回1;如果不匹配,则返回0。
像这样更改您的查询,
SELECT Password
FROM aspnet_Membership
WHERE PWDCOMPARE('Password321!', Password) = 1;
或者您可以使用PWDENCRYPT()
<强> PWDENCRYPT 强>
Returns the SQL Server password hash of the input value that uses the current
version of the password hashing algorithm.
<强>语法:强>
PWDENCRYPT ( 'password' )
像这样更改您的查询,
SELECT Password
FROM aspnet_Membership
WHERE Password = PWDENCRYPT('Password321!');
答案 1 :(得分:0)
如果您使用SQL Server对用户进行身份验证,则应尝试使用最佳做法,以最大程度地降低Web服务器中SQL注入的可能性。
以下查询是使用SHA1身份验证在登录时对用户进行身份验证的一个很好的示例。 注意,它不是一个java实现,但它应该让你很好地了解你做错了什么。
sql = "SELECT user_id, user_name, user_level
FROM users
WHERE user_name = '" . mysql_real_escape_string($_POST['user_name']) . "'
AND user_pass = '" . sha1($_POST['user_pass']) . "'";