簡體   English   中英

在服務器端實施MD5halsh鹽腌算法時,如何在客戶端加密密碼

[英]how to encrypt password at client side when implemented MD5halsh salted algorithm on server side

我已經實現了md5哈希加鹽算法。

使用此算法,我已將哈希密碼和鹽值保存到數據庫中。 然后在登錄頁面上檢索登錄用戶的鹽值,獲取密碼的字節,將鹽值和計算得出的哈希值相加,並將結果與​​保存的密碼進行匹配,它可以正常工作,但是我仍然可以看到明文密碼在客戶端。

如何與md5哈希加鹽算法一起在客戶端加密密碼值?

你做對了。 在不知道鹽的情況下,您將無法在客戶端哈希密碼(將鹽傳遞給客戶端不是一個好主意)。 如果您希望客戶端發送的數據是安全的,請使用ssl

注意:如果您使用ssl,客戶端將仍然able to see my password value in clear text因為僅在發送之前會加密數據。

您可以使用數據保護API(DPAPI)在客戶端安全地存儲密碼。 使用SafeString類將密碼存儲在內存中,並且正如@PLB所述,使用加密連接。

如果您擔心在文本框中輸入密碼。 然后將文本框的TextMode更改為Password

像這樣

<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>

解決這個問題的方法有很多,我現在最容易想到的就是使用某種挑戰。 服務器發送一個客戶端必須用作鹽的值。 服務器確保該值是唯一的,尚未到期且僅使用一次(這確保了不可能進行重放攻擊)。

這樣可以確保不發送純文本密碼,僅發送散列密碼。 服務器可以信任(無論如何,信任都與進行純文本身份驗證時一樣多)客戶端不只是簡單地重新發送一些舊哈希,因為需要明文密碼來計算具有“一次性鹽”的哈希。

另一種更復雜(更安全)的方式是從服務器具有公共密鑰而客戶端具有私有密鑰的密碼生成RSA密鑰對。 客戶端還具有服務器公鑰的副本。 用戶輸入密碼,只有正確的密碼才能獲得正確的rsa密鑰。

然后,用戶使用服務器的公鑰對請求進行加密,然后使用用戶的私鑰對請求進行簽名。 然后只有服務器才能解密請求,並且服務器可以通過使用用戶的公共密鑰驗證簽名來驗證發件人確實是正確的用戶。 與之相反的反應。 為了增加安全性,您應該添加一些獨特的“鹽”,如我之前所寫,以確保無法進行重放攻擊。

暫無
暫無

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

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