[英]Managing Passwords with Blank Spaces at the End
我正在使用VS2010 C#開發一個asp.net Web應用程序,它涉及用戶注冊和登錄。 如果用戶在登錄時輸入密碼並在密碼末端附加任意數量的空格,則應用程序允許他登錄,無論MS SQL SERVER數據庫中的密碼是否包含最后的空格或不。 我希望它從數據庫中驗證用戶在密碼字段中輸入的確切密碼。 示例:如果在數據庫中密碼保存為“mypass”並且用戶輸入密碼為“mypass”,則允許登錄,反之亦然。
我不想使用trim,因為它會禁止用戶在其密碼中包含空格。
我的密碼字段的類型有:nvarchar(50)
請幫幫我..!
如果要在數據庫中存儲純文本密碼,那么您做錯了。
數據庫應包含密碼的哈希值和該用戶的salt。
當用戶輸入密碼時,您使用用戶salt對其進行散列並將其與數據庫進行比較。
正如其他人所說,你不應該用純文本存儲它們......
但是在回答這個問題時,您可以使用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()
,請參見此處 。
關於這個問題的MS報價:
ANSI標准要求對比較中使用的字符串進行填充,以便在比較它們之前使它們的長度匹配。 填充直接影響WHERE和HAVING子句謂詞以及其他Transact-SQL字符串比較的語義。 例如,Transact-SQL認為字符串'abc'和'abc'在大多數比較操作中都是等效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.