繁体   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