簡體   English   中英

最后用空格管理密碼

[英]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'在大多數比較操作中都是等效的。

資料來源: http//support.microsoft.com/kb/316626

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM