我有一个c#app,我正在尝试使用php和mysql编写一个基本的登录表单来存储密码。
我正在使用SHA512 +随机盐来存储密码,所以目前我正在为密码做这个。
散列(密码+ randomSalt)+ randomSalt;
因此盐被附加到哈希,然后发送到服务器并存储。
现在我的问题是在有人尝试登录时进行比较。用户不知道盐,我不想将纯文本密码发送到服务器,所以我有点卡住了。
我应该加密密码并将其发送到服务器,让服务器向用户发送盐还是有更好的方法来实现它?
我只是想确保创建帐户密码的人员具有中等安全性。
提前致谢
答案 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描述了一种避免发送密码的方法(或散列,几乎相同)。