将密码与随机盐进行比较

时间:2011-11-02 00:58:00

标签: c# security login password-protection sha

我有一个c#app,我正在尝试使用php和mysql编写一个基本的登录表单来存储密码。

我正在使用SHA512 +随机盐来存储密码,所以目前我正在为密码做这个。

  

散列(密码+ randomSalt)+ randomSalt;

因此盐被附加到哈希,然后发送到服务器并存储。

现在我的问题是在有人尝试登录时进行比较。用户不知道盐,我不想将纯文本密码发送到服务器,所以我有点卡住了。

我应该加密密码并将其发送到服务器,让服务器向用户发送盐还是有更好的方法来实现它?

我只是想确保创建帐户密码的人员具有中等安全性。

提前致谢

2 个答案:

答案 0 :(得分:1)

通常,您应该将散列密码和随机salt值存储在数据库中。

当用户进行身份验证时,他或她的用户名和密码将被发送到服务器(最好通过SSL安全连接)。在那里,您可以使用用户名从数据库中检索salt值和哈希密码,以便与。

进行比较

最重要的是,您不应存储纯文本密码或通过不安全的连接发送密码。

有关详细信息,请参阅Password hashing, salt and storage of hashed values

答案 1 :(得分:0)

这几乎是不可能的。就像Derek所说,正确的是获得SSL证书并发送纯文本密码。

Salting是为了保护被盗密码数据库免于泄露每个人的密码。但是如果在客户端上完成散列步骤,则数据库中的值是通过网络发送的确切字符串。

如果你真的不能使用SSL,http://en.wikipedia.org/wiki/Challenge-response_authentication#Cryptographic_techniques描述了一种避免发送密码的方法(或散列,几乎相同)。