Я работаю над веб-сайтом, который должен быть очень безопасным для пользователей, поэтому мне нужны хэш-пароли. Обычно я использую MD5, но я читал, что он больше не безопасен. Поэтому я попробовал PHPass, но потом я прочитал, что он также был взломан. Поэтому я пробовал password_hash()
PHP 5.5, но я использую HostGator, а PHP – 5.4. Также я хочу иметь возможность добавлять соль, не зная ее (например, time() * userid()
), например, в password_hash()
.
Сила хэша очень важна для меня, потому что я хочу быть на 100% уверенным, что мои пользователи в безопасности. Так есть ли способ, который очень безопасен, а не что-то вроде SHA, который скоро будет взломан?
Используйте эту библиотеку, которая обеспечивает прямую совместимость с функциями password_*
.
Пример использования:
require_once("password.php"); // imports the library, assuming it's in the same directory as the current script $password = "HelloStackOverflow"; // example password $hash = password_hash($password, PASSWORD_BCRYPT); // here's the hash of the previous password $hash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 10)); // you can set the "complexity" of the hashing algorithm, it uses more CPU power but it'll be harder to crack, even though the default is already good enough if (password_verify($password, $hash)) { // checking if a password is valid /* Valid */ } else { /* Invalid */ }
PHP поставляется со встроенными алгоритмами хеширования, такими как MD5, SHA1 и т. Д. Однако с точки зрения безопасности не рекомендуется использовать эти функции для хэш-паролей, так как их можно легко разбить с помощью атаки с помощью bruteforce с помощью таких инструментов, как Passwordpro.
Лучше, если вы используете соление, чтобы защитить свои пароли. Ниже приведен пример:
$password = 'yourpassword'; $salt = 'randomstr!ng'; $password = md5($salt.$password);
Еще лучший способ получения соли заключается в том,
$password = 'yourpassword'; $salt = sha1(md5($password)); $password = md5($password.$salt);
Преимущество состоит в том, что таким образом значение соли является случайным, и оно изменяется для каждого пароля, что делает невозможным его разрыв.
Взгляните на http://php.net/manual/de/function.crypt.php
Вы должны рассмотреть возможность использования солей для предотвращения нападений с радужным столом. Вы можете найти учебник здесь: http://www.yiiframework.com/wiki/425/use-crypt-for-password-storage/
Я понимаю, что лучше всего использовать библиотеку для управления паролями.
Если вы не можете использовать php 5.5, вы можете попробовать эту библиотеку, которая работает для php5.3 +, посмотрите на этот проект: