2016-02-18 2 views
0

У меня есть код сценария для входа.Изменение sha1 на password_hash Не работает

К сожалению, использование sha1 больше не рекомендуется. Я попытался изменить его на password_hash(), но он не удался.

Оригинал

public static function create($username, $password) 
{ 
    $q = self::$db->prepare('INSERT INTO user(username, password, email) VALUES (:username, :password, :email)'); 

    return $q->execute(array(
     ':username' => $username, 
     ':password' => sha1($password), 
     ':email' => $email, 
    )); 
} 

Редактировать

public static function create($username, $password) 
{ 
    $q = self::$db->prepare('INSERT INTO user(username, password, email) VALUES (:username, :password, :email)'); 

    $new_password = password_hash($password, PASSWORD_DEFAULT); 

    return $q->execute(array(
     ':username' => $username, 
     ':password' => $new_password, 
     ':email' => $email, 
    )); 
} 

Что случилось с ним?

+2

какие ошибки вы получаете? –

+0

Вызывает ли ошибка? – phaberest

+0

@Norax. Пожалуйста, выполните проверку версии вашего php http://php.net/manual/en/function.password-hash.php – rahul

ответ

2

Поздравляем с переходом от древнего, небезопасного алгоритма!

У меня есть информация о том, как использовать password_hash в my answer to PHP Secure password generation and storage, но суть его копируется ниже:

В частности, вы можете хэш пароля с достаточно высокой стоимостью (выбрать стоимость, которая принимает только длинные достаточно того, что под ожидаемой максимальной нагрузкой, ваш сайт будет не совсем ЦП) - как в password_hash Example 2, но с обновленным фактором работы:

<?php 
/** 
* In this case, we want to increase the default cost for BCRYPT to 12. 
* Note that we also switched to BCRYPT, which will always be 60 characters. 
*/ 
$options = [ 
    'cost' => 14, 
]; 
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n"; 
?> 

Затем вы сохраняете строку она возвращает, которая включает в себя криптографически генерируется случайным образом соль и заданный множитель работы - увеличить коэффициент работы как m насколько вы можете, исходя из скорости входа в пиковое время по сравнению с мощностью процессора, помня, что на пике все ваши ядра могут работать параллельно, поскольку каждый из них будет хешировать для другого пользователя!

Чтобы проверить, получить строку он вернулся оттуда, где вы сохранили его (то есть база данных) и сравнить с password_verify example:

<?php 
// See the password_hash() example to see where this came from. 
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; 

if (password_verify('rasmuslerdorf', $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 
?> 

Как всегда, если вы хотите подробностей, пожалуйста, прочитайте Thomas Pornin's canonical answer to How to securely hash passwords - но PHP 5.5 Функции паролей используют Bcrypt, поэтому вы можете использовать достаточно высокую стоимость.

+0

Plus для использования «рабочего фактора»! – zaph

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