Шифрование BlowFish возвращает false в PHP

Используя руководство Tuts Plus по хэшированию, постоянно возвращает false при проверке хеш-значения. Пароль точно не был введен неправильно '111111'. Я сделал оператор IF, чтобы повторить то, что он возвращает, и он выходит как «Ложь».

Запрос PDO для вставки и выбора информации работает правильно.

Моя форма регистрации:

$pass_hash = PassHash::hash($_POST['pwd']); 

$q = "INSERT INTO Users(password) VALUES (:password);";

$query = $db->prepare($q);

$query->bindParam(":password",$pass_hash);

$results = $query->execute();
$user_id = $db->lastInsertID();

Моя форма входа:

<?php
require ("include/PassHash.php");  

if(isset($_POST['login'])){
$email = $_POST['email'];
$password = $_POST['password'];

$query = $db->prepare('SELECT * FROM Users WHERE email = :email');
$query->bindParam(":email",$email);
$results = $query->execute();

$total = $query->rowCount();
$row = $query->fetch();

// Returns more than 0 rows (Email found) and checks hash.
if($total>0 && PassHash::check_password($row['password'], $_POST['password'])){     
    // Correct credentials.
    $_SESSION['user_id'] = $row['id'];
    $_SESSION['user_email'] = $email;
    session_set_cookie_params(24*60*60);
    ob_start();
    header('Location: /index.php?p=user_account', true);
    exit();
    ob_end_flush();
} else {
    // Incorrect password / email.
}
}
?>

PassHash.php

<?php
class PassHash {
// blowfish
private static $algo = '$2a';
// cost parameter
private static $cost = '$10';
// mainly for internal use
public static function unique_salt() {
    return substr(sha1(mt_rand()),0,22);
}
// this will be used to generate a hash
public static function hash($password) {
    return crypt($password,
        self::$algo .
        self::$cost .
        '$' . self::unique_salt());
}
// this will be used to compare a password against a hash
public static function check_password($hash, $password) {
    $full_salt = substr($hash, 0, 29);
    $new_hash = crypt($password, $full_salt);
    return ($hash == $new_hash);
}
}
?>

Я распечатал пароль и адрес электронной почты после того, как форма была отправлена, и оба отображаются, так что это не ошибка ввода.


person Community    schedule 29.01.2013    source источник
comment
Достаточно ли широко поле вашей базы данных для хэша?   -  person Anirudh Ramanathan    schedule 30.01.2013
comment
Исправьте @Ктулху. Увеличение с VARCHAR(45) до VARCHAR(255) решило проблему.   -  person    schedule 30.01.2013


Ответы (1)


Увеличение VARCHAR(45) до VARCHAR(255) для поля пароля решило проблему.

person Community    schedule 29.01.2013