2016-03-31 2 views
4

Я написал этот код некоторое время назад, который я сейчас оживляю для нового проекта, но он не работает, и я не могу, чтобы жизнь меня определяла, почему это не будет проверьте хэш.Blowfish encryption - hash создается, но не проверяет

Ниже перечислены 2 функции при регистрации первой функции passwordEncrypt().

При попытке входа в систему вызывается функция checkPassword(), вместо входа в систему и эхо-ответа «да» она попадает в раздел, где он имеет значение «нет».

Так что, пожалуйста, если свежий набор глаз может заглянуть в большое спасибо!

// Encrypt user password 
function passwordEncrypt($password) { 
    // set the salt 
    $salt = substr(md5(time()), 0, 22); 

    // encrypt using blowfish with a load of 10 
    $password = crypt($password, '$2a$10$' . $salt); 

    // return the encrypted hash 
    return $password; 
} 

/* 
    Check password function when logging in 
    first we select the password from the supplied username from the database 
    // get the row and set the hash to the currect password from the database 
    //run the salts etc and check to see if the passwords match 
*/ 
function checkPassword($userName, $password, $db){ 
    $sql = 'SELECT password FROM users WHERE userName = :userName'; 
    $stmt = $db->prepare($sql); 
    $stmt->bindValue(':userName', $userName, PDO::PARAM_STR); 
    $stmt->execute(); 

    $numRows = $stmt->rowCount(); 

    if ($numRows > 0) { 
     $row = $stmt->fetch(); 
     $hash = $row['password']; 

     // run the hash function on $password  
     $fullSalt = substr($hash, 0, 29); 
     $new_hash = crypt($password, $fullSalt); 

     // Check that the password matches 
     if($hash == $new_hash) { 
      echo 'yes'; 
      exit; 
      return true; 
     } else { 
      echo 'no'; 
      exit; 
      return false; 
     } 
    } else { 
     echo 'way'; 
     exit; 
     return false; 
    } 
} 

Я зарегистрировал пароль, а затем попробовал и это то, что она возвращает

Пароль: $ 2a $ 10 $ 023d3086e8462207a1fecueWH4Ub40MWbQJ7F9 Поступил: $ 2a $ 10 $ 023d3086e8462207a1fecueWH4Ub40MWbQJ7F9hapWU3lYxlg3AAa нет

Так что нет добавление на hapWU3lYxlg3AAa

+0

Что длина столбца Пароль и длина хэш строки? –

+0

Кстати, ваши выходы отменяют ваши доходы. –

+0

если вы знаете, как пинговать кого-то, хорошо. Ваш вопрос не подходит для получения магического ответа. –

ответ

3

«длина колонны - это что? 40? 50? 60? oth э? $ 2a $ 10 $ 023d3086e8462207a1fecueWH4Ub40MWbQJ7F9 означает, что он слишком короткий. - Фред -ii-»

и

"ах в базе данных 45 -. Том C"

Там вы идете Длина столбца слишком коротка и потребности должно быть 60.

Пособие предлагает 255.
Незначительный корр. ection: 255 - это то, что предлагает руководство по эксплуатации password_hash(). Однако было бы лучше всего использовать 255 для того, что руководство также предлагает учесть в будущем и считает, что это «хороший выбор».

Вам необходимо очистить строки, изменить колонку на 60 или больше, а затем создать новый хеш и войти снова.

$ 2a $ 10 $ 023d3086e8462207a1fecueWH4Ub40MWbQJ7F9hapWU3lYxlg3AAa

60 длинных


Сноски:

Было сказано, что некоторые считают, что это трудно работать с crypt(), и используя password_hash() или пакет совместимости (если PHP < 5.5) https://github.com/ircmaxell/password_compat/ действует проще. Выбор за вами.

Смотрите эту Q & A на стек также:

+0

Фантастический помощник, спасибо всем, что ему нужно, это свежая пара глаз. Не думал о длине поля при восстановлении базы данных. Еще раз спасибо –

+0

@TomC Тебе больше всего нравится Том. Вскоре, когда я увидел ваш код и выглядел законным, мой * Spidey sense * покалывал по длине столбца. * Cheers * –

+0

haha ​​проверка длины столбца сразу попала в мой контрольный список для будущего, что ваше прямое чувство на вас! –

Смежные вопросы