Чем выгодней шифровать пароли?

Статус
В этой теме нельзя размещать новые ответы.

Bezhev

Постоялец
Регистрация
25 Дек 2012
Сообщения
364
Реакции
130
Привет.

Делаю небольшую cms под свои нужды, озадачился выбором метода криптования пароля. какой алгоритм лучше использовать?
md5 или sha1 ?

Перед постом погуглил, но в инете мнения расходятся.
Может есть какие-то другие, новые методы.. лучше, качественней.
 
без разницы если ломанут другую часть цмс (либо соседей) и получат доступ к файлам или базе. или пароль не длинный и слово из словаря. ну вообщем задача более чем "каким алгоритмом"?
главное не забыть про Для просмотра ссылки Войди или Зарегистрируйся ну и без фанатизма конечно же.
 
>>Делаю небольшую cms под свои нужды, озадачился выбором метода криптования пароля. какой алгоритм лучше использовать?
md5 или sha1 ?

Про соль не забудь, соль храни в отдельном поле, можно вообще в соседней БД, потом склеивай соль с пассом по вкусу. Надежно!
Блин. Написал ответ и вижу, что ссылку то дали уже :)
 
Многие фреймворки предоставляют свои средства для шифрования. Например, в Yii доступен CPasswordHelper, который реализует обёртку для crypt(). Собственно, crypt() с солью и будет на данный момент оптимальным методом для хэширования паролей.
 
Может есть какие-то другие, новые методы.. лучше, качественней.

Относительно недавно алгоритм SHA3 выбрали Для просмотра ссылки Войди или Зарегистрируйся
Нативной реализации в php (пока?) нет, однако есть код на github: Для просмотра ссылки Войди или Зарегистрируйся

Собственно, crypt() с солью и будет на данный момент оптимальным методом для хэширования паролей.
crypt в зависимости от настроек системы и переданной соли может использовать разный алгоритм (в том числе и md5).

DES, например, учитывает только первые 8 символов, поэтому "с большой вероятностью" результат будет одинаковым:
Код:
echo crypt('12345678','salt');
echo '<br>';
echo crypt('1234567891091029','salt');

Для просмотра ссылки Войди или Зарегистрируйся, с поправкой использовать соль для Blowfish-алгоритма вида $2a$07$blablabla вариант принимается.. но опять же Для просмотра ссылки Войди или Зарегистрируйся

Ещё можно использовать Для просмотра ссылки Войди или Зарегистрируйся с явным указанием алгоритма
(там же в комментариях можно статистику посмотреть - длину и сравнение скоростей вычисления по каждому алгоритму)
Итого:
Blowfish с солью - вполне приемлемый. Однако, если хочется "чего-то нового" - можно в сторону SHA3 посмотреть или выбрать из экзотичных
Код:
foreach (hash_algos() as $v) {
        echo "$v<br>\n";
}
 
Как вариант можно использовать md5+salt но результат предварительно обработанный скремблером. Т.е. Символы перемешаны по определенному правилу. Поскольку правило знаете только вы, то утечка БД совершенно не страшна.
 
А чем плох md5? Тем что пароли можно расшифровать с помощью различных сервисов? Так можно юзать md5(md5($pass)) Или этот метод тоже плох?
И расскажите про соль, статья Для просмотра ссылки Войди или Зарегистрируйся на английском, из хабра тоже не совсем понятно где лучше её хранить, а главное как проверять пароль, когда юзер логинится на сайт
 
А чем плох md5? Тем что пароли можно расшифровать с помощью различных сервисов? Так можно юзать md5(md5($pass)) Или этот метод тоже плох?
И расскажите про соль, статья Для просмотра ссылки Войди или Зарегистрируйся на английском, из хабра тоже не совсем понятно где лучше её хранить, а главное как проверять пароль, когда юзер логинится на сайт
как правило в базе хранится закодированый пароль в одном поле и соль в другом, вариантов кодирования много, например md5($salt.md5($pass.$salt)). суть в том, что вы получаете имя пользователя, которое уникально и пароль, дальше, кодируете пароль согласно алгоритму и проверяете выборкой из базы.
грубо говоря:
$username = $_POST['username'];
$pass = $_POST['password'];
$salt = 'jdweidowenobo322';
$hashed = md5($salt.md5($pass.$salt));
$sql = "SELECT COUNT(*) FROM users where username = '$username' AND password = '$hashed'"; и потом проверяете сколько строк вернулось, если > 0 то всё прошло успешно, иначе либо имя неверное либо пароль.

код скорее представлен в виде примера, чтоб показать каким именно способом можно реализовать такое, и не включает проверки валидности того, что запостил пользователь.
 
Многие фреймворки предоставляют свои средства для шифрования. Например, в Yii доступен CPasswordHelper, который реализует обёртку для crypt(). Собственно, crypt() с солью и будет на данный момент оптимальным методом для хэширования паролей.
Как раз через пару дней наткнулся на новые возможности php5.5, думаю что cryprt будет предпочтительней на данный момент.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху