繁体   English   中英

如何验证和验证密码?

[英]How do I authenticate and validate a password?

我真的不知道在这里问什么问题。 我的问题陈述很简单:我需要在数据库中存储一个带密码的密码,根据存储的密码验证输入的密码,并在用户尝试登录时使用随机质询字验证密码。 我正在使用php / javascript。

在试图解决这个问题时,我遇到的问题是,如果我以html格式传递一个挑战词,然后使用该词哈希输入的密码,我可以在服务器上验证密码,但我无法分开来自挑战词的密码,以便我可以根据数据库上的盐渍密码对其进行验证。 如果我以清除方式将密码发送到服务器或没有挑战词,我可以验证它,但现在我无法可靠地验证它。

我想我需要一种双向算法,所以我可以用密钥对它进行加密,然后在验证密码时验证密钥。 我该怎么做? 或者如果无法完成那么我该怎么办?

使用客户端脚本加密密码通常是个坏主意。 正确的方法是使用SSL。

此外, 永远不要以明文形式存储密码。 如果必须使用上述方法,请将密码哈希两次:一次用于将其存储在数据库中,另一次用于双向身份验证。

  1. 要存储密码,请生成随机盐。 存储HASH(password+salt)salt (服务器或客户端都可以执行此计算。)

  2. 要执行身份验证,服务器会查找saltHASH(password+salt) 然后它生成随机挑战并将盐和挑战发送给客户端。

  3. 在客户端上,提示用户输入密码。 计算:
    HASH( HASH(password+salt) + challenge) 将其发送到服务器。

  4. 在服务器上,你已经有HASH(password+salt) ,你有challenge 所以你也可以计算:
    HASH( HASH(password+salt) + challenge) 将此与客户发送给您的信息进行比较。 如果匹配,则密码正确。

请注意,这容易受到MITM攻击,因此应该在本身受MITM保护的连接上使用,例如SSL连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM