在服务器端实现MD5halsh salted算法时,如何在客户端加密密码

时间:2012-10-16 06:57:16

标签: c# md5 salt

我已经实现了md5哈希盐渍算法。

使用此算法,我已将散列密码和salt值保存到数据库中。 然后在登录页面上检索登录用户的盐值,获取密码的字节添加盐值和计算哈希并将结果与​​保存的密码匹配,它工作正常但我仍然可以在明文中看到我的密码值在客户端。

如何在客户端加密密码值以及md5 hash salted算法?

4 个答案:

答案 0 :(得分:1)

你做对了。如果不知道盐(并且将盐传递给客户端不是一个好主意),您将无法在客户端使用哈希密码。如果您希望客户端发送的数据是安全的,请使用ssl

注意:如果您使用ssl客户端仍然是able to see my password value in clear text,因为数据只会在发送前加密。

答案 1 :(得分:0)

您可以使用data protection API (DPAPI)安全地在客户端存储密码。使用SafeString类将密码存储在内存中,正如@PLB已经提到的那样,使用加密连接。

答案 2 :(得分:0)

如果您担心在文本框中输入密码。 然后将文本框的TextMode更改为密码

喜欢这个

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

答案 3 :(得分:0)

有很多不同的方法可以解决这个问题,我现在最容易想到的就是使用某种挑战;服务器发送客户端必须用作salt的值。服务器确保该值是唯一的,尚未过期,并且仅使用一次(这可确保无法进行重放攻击。)

这确保不发送纯文本密码,只发送散列密码。服务器可以信任(尽可能多地信任纯文本身份验证时)客户端不会简单地重新发送一些旧的哈希值,因为需要使用明文密码来计算“一次性盐”的哈希值。

另一种更复杂(和安全)的方法是从密码生成RSA密钥对,其中服务器具有公钥,客户端是私有密钥。客户端还具有服务器公钥的副本。用户输入密码,只有正确的密码才能获得正确的rsa密钥。

然后,用户使用服务器的公钥加密请求,然后使用用户的私钥对请求进行签名。然后,只有服务器可以解密请求,并且服务器可以通过使用用户的公钥验证签名来验证发送方确实是正确的用户。与反应相反。为了增加一些安全性,你应该添加一些独特的“盐”,就像我之前写的那样,以确保无法进行重放攻击。