如何验证和验证密码?

时间:2011-10-23 01:15:50

标签: php validation authentication

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

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

我认为我需要某种双向算法,因此我可以使用密钥对其进行加密,然后在验证密码时对密钥进行身份验证。我该怎么做?或者如果无法完成那么我应该做什么?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

  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)。将此与客户发送给您的信息进行比较。如果匹配,则密码正确。

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