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



我已经实现了一个md5哈希salted算法。

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

我如何在客户端加密密码值以及md5哈希盐算法?

您的做法是正确的。在不知道salt的情况下,您将无法在客户端上散列密码(并且将salt传递给客户端不是一个好主意)。如果您希望客户端发送的数据是安全的,请使用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>

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

这样可以确保不会发送纯文本密码,只发送哈希密码。服务器可以信任(不管怎样,在进行纯文本身份验证时也一样信任)客户端不会简单地重新发送一些旧的哈希,因为需要明文密码来计算"一次性盐"哈希。

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

然后,用户使用服务器的公钥对请求进行加密,然后使用用户的私钥对请求进行签名。然后只有服务器可以解密请求,服务器可以通过使用用户的公钥验证签名来验证发件人是否真的是正确的用户。而反应恰恰相反。为了增加一些安全性,你应该添加一些独特的"盐",就像我之前写的那样,以确保重放攻击是不可能的。

最新更新