Encoding 验证密码+;加盐

Encoding 验证密码+;加盐,encoding,cryptography,authorization,Encoding,Cryptography,Authorization,我使用编码密码sha1(pw+salt)和salt将用户的凭据存储在数据库中。 当我尝试从客户端应用程序登录用户时,我只使用不同的salt值执行相同的操作,因此我发送sha1(pw+另一个_salt)和另一个_salt进行授权 问题是,应该对接收到的编码密码做什么进一步的修改,以便能够对照存储值进行检查。如果您从客户端发送内容,则不管它是散列密码还是字符串。若它是由客户端生成的内容(即,您在客户端而不是服务器上生成salt),那个么攻击者也可以发送您的字符串。所以,如果它的连接不安全,那么您将添

我使用编码密码sha1(pw+salt)和salt将用户的凭据存储在数据库中。 当我尝试从客户端应用程序登录用户时,我只使用不同的salt值执行相同的操作,因此我发送sha1(pw+另一个_salt)和另一个_salt进行授权


问题是,应该对接收到的编码密码做什么进一步的修改,以便能够对照存储值进行检查。

如果您从客户端发送内容,则不管它是散列密码还是字符串。若它是由客户端生成的内容(即,您在客户端而不是服务器上生成salt),那个么攻击者也可以发送您的字符串。所以,如果它的连接不安全,那么您将添加额外的工作,这并没有帮助


要允许使用另一个salt检查服务器上的密码,您需要以明文形式存储原始密码

这就是在数据库中存储哈希而不是密码的全部目的,就是不允许仅从哈希猜测密码。如果您另外添加了盐,那么您需要使用相同的盐(它是公共的,因为它以明文形式存储在数据库中,但现在它是原始密码的一部分)。你的问题是这样的:

Haw登录用户(其密码为“secure password”+“hard”=>sha1(“secure passwordhard”))发送某种+“soft”(然后使用sha1(某种+“soft”))进行测试)


如果您确实需要此应用程序工作,只需从客户端应用程序以明文形式发送用户密码,但要通过安全连接。

另一个注意事项:不要使用SHA-1(或SHA-2)等快速哈希进行密码哈希,请使用慢速哈希。有关详细信息,请参阅。为了强调帕罗的观点:任何合适的身份验证算法都会使用哈希算法的数万次迭代,以使字典攻击在计算上过于昂贵。我强烈建议您使用第三方库来管理密码身份验证,如
bcrypt
实现。当您了解了它的工作原理,以及它为什么要做所有事情时,您就可以开始考虑编写自己的密码了,不过到那时,希望您已经意识到您仍然没有必要的专业知识。“要允许使用另一个salt在服务器上检查密码,您需要以明文形式存储原始密码。”-请不要给出那种建议。请看一看SRP,它是一个存储hased密码的系统,每次调用都会使用salt来阻止重播和其他恶意行为。@noloader我以前没听说过,谢谢!但在SRP(如果我理解正确的话)中,你们用公钥加密你们的密码,用服务器上的私钥解密——这就是我写的“只需从客户端应用程序以明文形式发送用户密码,但通过安全连接”,其中安全连接可以是公私加密或SSL或你们手头的任何东西。SRP不允许您使用不同的随机salt对用户密码进行散列,并发送生成的SHA1,然后在服务器上使用原始salt计算另一个散列。