Mam problem z użyciem crypt(), gdzie jeśli użytkownik ma hasło (password1 w tym przykładzie) i zmieniają go na password2, hash zwraca ten sam wynik. Możesz przetestować to tutaj: OLD LINK Wpisz hasło1 jako aktualne hasło, a hasło2 jako nowe hasło i potwierdź hasło, zobaczysz wyniki. Jeśli wprowadzono całkowicie nie podobne hasło, nie ma problemu. Rozumiem, że istnieją inne sposoby radzenia sobie z hashami itp. Jestem bardziej ciekawy niż cokolwiek innego. Mój kod jest poniżej:Crypt zwraca tę samą mieszankę dla dwóch różnych (podobnych) haseł.
<?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: ";
var_dump($_POST['currentpassword']);
echo "<br/>";
echo "New Password: ";
var_dump($_POST['password']);
echo "<br/>";
echo "New Hash: ";
var_dump($hash);
echo "<br/>";
echo "Current Password Hash: ";
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.";
}
}
}
}
?>
Jeśli korzystasz z bcrypt, pamiętaj, że maksymalna długość hasła to 55 znaków. Czy hasła próbują dłużej niż to? – Mike
Nie w tym przykładzie. – dcclassics
Który algorytm Crypt() jest używany? – TML