我在PHP中编写了一个外部身份验证,它适用于99%的用户。但是,身份验证不适用于绝对数量相当多的其他1%。我已经写过IPB,但他们无法帮助我。
我发现原因是我尝试重建md5哈希的方式。请再次注意,我使用的方法与IPB(https://www.invisionpower.com/support/guides/_/advanced-and-developers/miscellaneous/passwords-in-ipboard-r130)建议的完全相同。以下代码示例显示了从数据库中的md5创建的md5 DIFFERS的示例。论坛上的正常登录使用此密码。
<?php
$md5 = 'e69618bbe9850fbaf633014f84b8f040';
$salt = '}i3#W';
$plainpass = 'Wv&Txq,LYD-su_6';
$saltedPassword = md5( md5($salt) . md5($plainpass) );
echo "Desired result: $md5 , actual result: $saltedPassword";
?>
我怎样才能达到我想要的md5?我想这与用户的密码或用户的盐有关。因此,它适用于所有用户的99%,但不适用于此示例和其他用户。
答案 0 :(得分:0)
通过IPB4版本,他们将所有旧密码更新为blowfish加密。但是,只有在用户登录论坛套件后才会发生这种情况。在此之前,旧密码加密将保留。所以实际上你必须检查它是否是md5盐渍密码,或者密码是否用河豚加密(见下文)。
自IPB4发布以来,密码加密已从盐渍MD5更改为Blowfish:
/* $password is the raw password and $salt is the salt returned from fetchSalt */
crypt( $password, '$2a$13$' . $salt );
$ 2a $ 13 $指的是盐前缀和不应更改的预先确定的成本因素。