最后用空格管理密码

时间:2014-03-12 15:37:42

标签: c# asp.net sql-server visual-studio-2010 passwords

我正在使用VS2010 C#开发一个asp.net Web应用程序,它涉及用户注册和登录。 如果用户在登录时输入密码并在密码末端附加任意数量的空格,则应用程序允许他登录,无论MS SQL SERVER数据库中的密码是否包含最后的空格或不。我希望它从数据库中验证用户在密码字段中输入的确切密码。 例: 如果在数据库中密码保存为" mypass" 并且用户输入密码为" mypass" 它允许登录,反之亦然。

我不想使用修剪,因为它会禁止用户在其密码中包含空格。

我的密码字段的类型为:nvarchar(50)

请帮帮我..!

2 个答案:

答案 0 :(得分:1)

如果要在数据库中存储纯文本密码,那么你做错了。

数据库应包含密码的哈希值和该用户的salt。

当用户输入密码时,您使用用户salt对其进行哈希处理并将其与数据库进行比较。

答案 1 :(得分:1)

正如其他人所说,你不应该用纯文本存储它们......

在回答这个问题时,您可以使用DATALENGTH()函数来比较值的长度:

DECLARE @pass AS VARCHAR(10) = 'pass '

SELECT (CASE WHEN @pass = 'pass' and DATALENGTH(@pass) = DATALENGTH('pass') 
             THEN 1 
             ELSE 0 
        END) AS IsMatch

此示例将返回false,因为值的实际长度不匹配,否则将使用密码。

如果没有比较数据长度的函数,它将返回true。

注意: LEN()函数也会忽略尾随空格,因此无法取代DATALENGTH(),请参阅here

关于此问题的MS报价:

  

ANSI标准要求填充所用的字符串   比较,以便在比较它们之前它们的长度匹配。该   padding直接影响WHERE和HAVING子句的语义   谓词和其他Transact-SQL字符串比较。 例如,   Transact-SQL考虑字符串' abc'和' abc'相当于   对于大多数比较操作。

来源:http://support.microsoft.com/kb/316626