2015-02-12 229 views
0

我需要一些幫助來理解如何使用SHA256或SHA512爲SQL中的用戶提供哈希和鹽密碼。我認爲對於每個用戶,我必須生成不同的鹽?如何在登錄和更新時檢查密碼以及MySQL中現有的密碼?SHA256/SHA512:用於密碼散列和醃製的MySQL代碼

我用這個資源做了一些實現的研究,但它只顯示Java代碼,我該如何在MySQL中做到這一點?這會在存儲過程中完成嗎?

感謝

+0

您正在使用哪種RDBMS? – SoulTrain 2015-02-12 05:11:39

+0

@SoulTrain MSSQL – javakid1993 2015-02-12 05:15:05

回答

0

我在安全方面沒有權力,但使用SQL Server,你可以作如下處理方式不同的部分:

哈希計算:

你可以使用[HASHBYTES]和基於您的要求的SHA-2算法。 HASHBYTES('SHA2_256', @Password); 請注意,該函數只需要8000字節,並且可以在varchar,nvarchar或varbinary上運行,這對您的情況應該足夠了,但以防萬一。

你也可以在.NET中編寫一個SQL CLR函數來做散列,如果輸入約束不適合你。

對於鹽:

使用GUIDs,使用GUID的一部分可能不會給你一個鹽所需的熵,所以我建議使用整個字符串。

或使用RANDOM()功能,以產生具有邏輯的位的唯一的字母數字字符串。

過程:

添加SaltPassword散列(HASHBYTES('SHA2_256', @Password + Salt);之前和同時存儲Hashed outputSalt爲在註冊過程中用戶。

在隨後的登錄嘗試中,添加user-entered password with the salt並獲取散列輸出,然後將其與存儲散列值進行比較。如果值匹配,那麼用戶是合法的,否則不是。

+0

謝謝你,只是幾個問題,你能更詳細地展示如何創建和存儲鹽嗎?我也將存儲HASHBYTES('SHA2_256',@Password + Salt)操作的散列輸出和鹽嗎?因此,要驗證用戶,我會採取生成鹽並重新與他輸入的密碼相匹配的存儲哈希我有? 最後,如果要在SQL代碼中完成,還是通常在使用JDBC的Java代碼中完成,這是否會在存儲過程中完成? – javakid1993 2015-02-12 05:40:28

+0

您將創建一個表來存儲每個用戶的散列輸出和鹽(用戶標識)。爲了存儲這些生成的數據,你必須查看SQL的'Insert'和'Update'結構。您對認證過程的理解是正確的,並且所有這些都可以在SQL過程中以最佳方式完成。 – SoulTrain 2015-02-12 05:50:18