我需要一些幫助來理解如何使用SHA256或SHA512爲SQL中的用戶提供哈希和鹽密碼。我認爲對於每個用戶,我必須生成不同的鹽?如何在登錄和更新時檢查密碼以及MySQL中現有的密碼?SHA256/SHA512:用於密碼散列和醃製的MySQL代碼
我用這個資源做了一些實現的研究,但它只顯示Java代碼,我該如何在MySQL中做到這一點?這會在存儲過程中完成嗎?
感謝
我需要一些幫助來理解如何使用SHA256或SHA512爲SQL中的用戶提供哈希和鹽密碼。我認爲對於每個用戶,我必須生成不同的鹽?如何在登錄和更新時檢查密碼以及MySQL中現有的密碼?SHA256/SHA512:用於密碼散列和醃製的MySQL代碼
我用這個資源做了一些實現的研究,但它只顯示Java代碼,我該如何在MySQL中做到這一點?這會在存儲過程中完成嗎?
感謝
我在安全方面沒有權力,但使用SQL Server,你可以作如下處理方式不同的部分:
哈希計算:
你可以使用[HASHBYTES]
和基於您的要求的SHA-2算法。 HASHBYTES('SHA2_256', @Password);
請注意,該函數只需要8000字節,並且可以在varchar,nvarchar或varbinary上運行,這對您的情況應該足夠了,但以防萬一。
你也可以在.NET中編寫一個SQL CLR
函數來做散列,如果輸入約束不適合你。
對於鹽:
使用GUIDs
,使用GUID的一部分可能不會給你一個鹽所需的熵,所以我建議使用整個字符串。
或使用RANDOM()
功能,以產生具有邏輯的位的唯一的字母數字字符串。
過程:
添加Salt
到Password
散列(HASHBYTES('SHA2_256', @Password + Salt);
之前和同時存儲Hashed output
和Salt
爲在註冊過程中用戶。
在隨後的登錄嘗試中,添加user-entered password with the salt
並獲取散列輸出,然後將其與存儲散列值進行比較。如果值匹配,那麼用戶是合法的,否則不是。
謝謝你,只是幾個問題,你能更詳細地展示如何創建和存儲鹽嗎?我也將存儲HASHBYTES('SHA2_256',@Password + Salt)操作的散列輸出和鹽嗎?因此,要驗證用戶,我會採取生成鹽並重新與他輸入的密碼相匹配的存儲哈希我有? 最後,如果要在SQL代碼中完成,還是通常在使用JDBC的Java代碼中完成,這是否會在存儲過程中完成? – javakid1993 2015-02-12 05:40:28
您將創建一個表來存儲每個用戶的散列輸出和鹽(用戶標識)。爲了存儲這些生成的數據,你必須查看SQL的'Insert'和'Update'結構。您對認證過程的理解是正確的,並且所有這些都可以在SQL過程中以最佳方式完成。 – SoulTrain 2015-02-12 05:50:18
您正在使用哪種RDBMS? – SoulTrain 2015-02-12 05:11:39
@SoulTrain MSSQL – javakid1993 2015-02-12 05:15:05