У меня возникла странная проблема с хешированными паролями. Я использовал тот же скрипт с другого сайта на другом сервере (linux running php) на этом веб-сайте (Windows работает php). Логин не будет работать, сохраненный хешированный пароль не соответствует введенному паролю, я повторил проверку, и они просто этого не делают. Как я вижу, код (что то же самое на обоих) работает на Linux, но не на Windows, возможно ли это?php hashed password check not working
Вот код (который является одинаковым на обоих сайтах, так не должно быть проблемой)
<?PHP
// get user data
$strUsername = isset($_POST['email']) ? trim(strip_tags($_POST['email'])) : null;
$strPassword = isset($_POST['password']) ? trim(strip_tags($_POST['password'])) : null;
$DBH = new PDO('database details...');
$SQL = "SELECT inj_user_email,inj_user_password,inj_user_password_salt,inj_user_id FROM inj_user WHERE inj_user_email = :username;";
if ($strUsername == '' || $strPassword = '')
{
\t $missing = 'Please enter an email address and password';
}
else
{
\t $STH = $DBH->prepare($SQL);
\t $STH->bindParam(':username', $strUsername);
\t $STH->execute();
\t $row = $STH->fetch();
\t if ($STH->rowCount() > 0) {
\t \t \t $verify_password = hash('sha512' , $strPassword.$row['inj_user_password_salt']);
\t \t \t echo $verify_password.'<br>'.$row['inj_user_password'];
\t \t \t if (strcmp($verify_password , $row['inj_user_password']) == 0)
\t \t \t {
\t \t \t \t session_start();
\t \t \t \t session_regenerate_id(true);
\t \t \t \t $_SESSION['user1'] = $row['inj_user_id'];
\t \t \t \t header('Location: ../screen/');
\t \t \t }
\t \t \t else
\t \t \t {
\t \t \t \t $missing='Incorrect password';
\t \t \t \t echo $missing;
\t exit;
\t \t \t }
\t }
\t else
\t {
\t \t $missing ='Email address not found';
\t }
}
header('Location: ../?missing='.$missing);
?>
Спасибо.
Как хранятся значения в базе данных? Вы уверены, что хэш и соль в базе данных обновлены? – Keelan