2011-11-02 136 views
0

我有一个C#应用程序,我想写一个基本的登录表单使用PHP和MySQL来存储密码。比较密码与随机盐

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

散列(密码+ randomSalt)+ randomSalt;

所以salt被附加到散列,然后发送到服务器并存储。

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

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

我只是想确保任何提供帐户密码的人都是中等安全的。

在此先感谢

+1

考虑使用用户标识符作为盐,这样你实际上可以重新创建散列。 –

回答

1

在一般情况下,你应该存储在数据库中的哈希密码和随机盐值。

当用户认证时,他或她的用户名和密码被发送到服务器(优选地,通过SSL安全连接)。在那里,你使用用户名从数据库中检索盐值和哈希密码来做比较。

底线是,你永远不应该存储明文密码或送他们通过不安全的连接。

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

+0

不错的参考链接! –

0

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

腌制是为了防止窃取的密码数据库泄露每个人的密码。但是,如果散列步骤在客户端上完成,则数据库中的值是通过网络发送的确切字符串。

如果你真的不能使用SSL,http://en.wikipedia.org/wiki/Challenge-response_authentication#Cryptographic_techniques描述的方式,以避免发送密码(或哈希值,这几乎是一样的)。