簡體   English   中英

如何使用密碼的列加密以及在業務邏輯中使用密碼鹽技術對用戶進行身份驗證?

[英]How to authenticate user using column encryption of password as well as using password salt technique at business logic?

我在創建邏輯時遇到問題。 我有兩個存儲過程:一個通過加密密碼和電子郵件創建用戶帳戶:

if (SELECT count([Email])FROM [Regs] where EncryptByAsymKey(AsymKey_ID('---encryption key----'),@email)=@email)=0
       begin 
       INSERT INTO [Regs]
           ([Password]
           ,[Email]) values (EncryptByAsymKey(AsymKey_ID('---encryption key----'),@password),EncryptByAsymKey(AsymKey_ID('---encryption key----'),@email));
           select @scopeIdentity = SCOPE_IDENTITY();
   --OTHER OPERATIONS--

其他人則通過接受密碼和電子郵件,然后將兩者解密來對用戶進行身份驗證:

if @keyType=0 and (select count([UsrId])  FROM [Regs] where CONVERT(nvarchar(MAX), DECRYPTBYASYMKEY(ASYMKEY_ID('---encryption key----'), [Password], @enkey)) = @password and CONVERT(nvarchar(MAX), DECRYPTBYASYMKEY(ASYMKEY_ID('---encryption key----'), [Email], @enkey))= @key)>0
     begin
     select @userId= [UsrId],@username=[UserName],@uemail=CONVERT(nvarchar(MAX), DECRYPTBYASYMKEY(ASYMKEY_ID('---encryption key----'), [Email], @enkey)) FROM [Regs] where CONVERT(nvarchar(MAX), DECRYPTBYASYMKEY(ASYMKEY_ID('---encryption key----'), [Password], @enkey))=@password and CONVERT(nvarchar(MAX), DECRYPTBYASYMKEY(ASYMKEY_ID('---encryption key----'), [Email], @enkey))=@key;
    set @isvalidated=0;
    set @o_uid=@userid;
    set @o_username=@username;
    set @o_uemail=@uemail
     end
    --OTHER OPERATIONS--

--OTHER OPERATIONS--包含諸如在創建或驗證用戶時插入,刪除或更新其他表之類的任務。 這就是我面臨的問題。

這兩個存儲過程由C#函數createUser()authUser() 我希望每個功能只能建立一個數據庫連接。 這就是為什么我在同一存儲過程中編寫其他操作的原因。 這樣就可以一次往返數據庫。 這會將調用保存到數據庫。

現在,我要實現此處給出的密碼哈希或鹽技術: http : //www.codeproject.com/Articles/425150/Beginners-guide-to-a-secure-way-of-storing-passwor

本文介紹了如何在C#中對密碼進行哈希處理並將其發送到數據庫,然后進行獲取,再次對其進行哈希處理,然后在C#處進行比較。 但是問題是我的比較是在存儲過程中完成的,如果正確,則存儲過程將執行其他操作。 但是我也想在C#處散列密碼,以便即使破解了數據庫加密,黑客也將需要C#代碼來找出真實的密碼(反之亦然)。 因此,請告訴我如何在不對存儲過程進行任何更改的情況下實現此技術?

在99.999999999%的情況下,您需要哈希密碼,以便無法檢索原始密碼。 這意味着即使您的數據庫遭到破壞,也需要大量的計算工作才能檢索密碼。

如果您對將其留在SQL Server上HASHBYTES ,那么我將不使用AES, HASHBYTES來看看HASHBYTES 使用SHA2_256SHA2_512作為算法,並對輸入進行加鹽處理,就像您已經在做的那樣。 但是,還有其他更安全的哈希函數(如bcrypt或PBKDF2),我認為這些函數不是在SQL中實現的,因此您需要在業務邏輯層實現密碼哈希。

一旦實現了哈希方法,就可以按照生成用戶密碼哈希的相同方式來哈希用戶輸入。 然后將散列的輸入值與數據庫中存儲的散列進行比較。 如果它們匹配,則密碼匹配。

在Information Security Stack Exchange上有關密碼哈希的更多信息

暫無
暫無

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

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