gpt4 book ai didi

php - 地穴为两个不同(相似)的密码返回相同的哈希值

转载 作者:可可西里 更新时间:2023-11-01 13:40:15 29 4
gpt4 key购买 nike

我在使用 crypt() 时遇到问题,如果用户有密码(本例中为 password1),并且他们将其更改为 password2,则散列会返回相同的结果。您可以在此处进行测试:旧链接输入 password1 作为当前密码,输入 password2 作为新密码并确认密码,您将看到结果。如果输入完全不相似的密码,则没有问题。我知道还有其他方法可以散列密码等。我很好奇。我的代码如下:

<?php

$oldpassword="password1";

echo "<form method=\"post\">
<p>Enter Current Password: <input type=\"password\" name=\"currentpassword\" /></p>
<p>Enter New Password: <input type=\"password\" name=\"password\" /></p>
<p>Confirm New Password: <input type=\"password\" name=\"confirmpassword\" /></p>
<p><input type=\"submit\" value=\"Change Password\"></p>
</form>";

$user_id = $_SESSION['user_id'];
$pass=$_POST['password'];
$salt = 'xxxxx';
$currentpassword = crypt($_POST['currentpassword'], $salt);
$oldpassword = crypt($oldpassword, $salt);
if(isset($_POST['password'])) {
if ($currentpassword !== $oldpassword) {
echo "The password you entered for current password does not match our records.";
}
else {
if ($_POST['password'] && $_POST['confirmpassword']) {
if ($_POST['password'] == $_POST['confirmpassword']) {
$hash = crypt($pass, $salt);
if ($hash == $currentpassword) {
echo "Current Password:&nbsp;";
var_dump($_POST['currentpassword']);
echo "<br/>";
echo "New Password:&nbsp;";
var_dump($_POST['password']);
echo "<br/>";
echo "New Hash:&nbsp";
var_dump($hash);
echo "<br/>";
echo "Current Password Hash:&nbsp";
var_dump($currentpassword);
echo "<br/>";
echo "<hr/>";
echo "Your new password cannot be the same as your current password.";
}
else {
echo "Your password has been changed successfully<br/>";
}
} else {
echo "Your passwords do not match. Please try again.";
}
}
}
}

?>

最佳答案

使用crypt你必须提供适当的盐。每个算法都有自己的盐格式。我的猜测是您使用了很少的随机字符作为盐,这与任何高级算法都不匹配,因此 php 将您的盐减少到前 2 个字符并回退到基本的 DES 算法。 DES 算法哈希最多 8 个字符,password1password2 都是 9 个字符长,因此只使用 password来自两者,因此具有相同的哈希值。

解决方案:使用适当的盐格式以获得最强的可用算法,为每个密码生成随机盐

推荐的解决方案:https://github.com/ircmaxell/password_compat (对于 php 5.3.7 - 5.4.x)和切换到 php 5.5 之后:http://php.net/password_hash

关于php - 地穴为两个不同(相似)的密码返回相同的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034422/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com