Другие языки программирования и технологии

MD5

md5($password)
md5(md5($password))
md5(md5(md5($password)))
Верно ли что для последнего варианта криптостойкость выше чем для первых двух ?
Larik Shushkovsky
Larik Shushkovsky
1 589
Зачем тебе вообще мд5? По закону, что ли, хэш дырявым обязан быть?

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

ша1 (на латинские буквы ша1 сам переведи) от пароля с хорошей солью тебя спасет.




ПС. Только законы исследуй, криптоустойчивые решения во многих странах формально приводят к большим административным геморроям. Это не шутка: -)
Амантай-Еркеназ Алиев
Амантай-Еркеназ Алиев
19 662
Лучший ответ
Какая криптостойкость? Хеш не расшифровывается в принципе, для него это понятие смысла не имеет.
Но в сети есть базы, в которых можно по значению мд5 нарыть все возможные исходные варианты из перебора. В том числе и для тройного мд5.
Эркин Эргашев
Эркин Эргашев
7 591
Larik Shushkovsky Я имел ввиду вариант перебора. . В сети базы рассчитаны под наиболее популярные алгоритмы генерации (wordpress, форумы и т. д. ) .. скажем md5(pass.salt)... Верно ли что при использовании уникального алгоритма генерации - шанс перебора пароля по уже генерированным таблицам - будет ниже?
Nurzhan Sovetbekov. нифига таких баз нету ( я долго искал ..
В интернете есть так называемые радужные таблицы. Это огромная База хешей всяких разных паролей. Там есть даже тройные хеши.
Для того, чтобы обезопасить пароли пользователей используют соль. Расскажу подробно.
В таблице с пользхователями в БД должно быть дополнительное поле "salt" (соль) .
Когда пользователь регистрируется, генерируется случайная строка (соль) , которая записывается в таблицу с пользователями как раз в то самое новое поле. Пароль пользователя при регистрации мы "солим". Например:
$pass = $_POST['pass']; //это пароль, который ввел пользователь
$salt = generate_salt(); //это сгенерированная соль
$salted_pass = md5($salt.md5($pass.$salt.md5($salt.salt))); //а здесь мы "солим" пароль
Мы получили "соленый" пароль. На тот хеш, что у нас получился, гарантированно нет расшифровки в радужных таблицах.
Записываем получившийся хеш в БД (вместе с солью и остальными данными из формы) .
Когды пользователь авторизуется, мы вынимаем из таблицы с пользователями того, кто подходит по логину (только по логину) . В получившемся массиве мы ищем соль, которую записали туда при регистрации данного пользователя. Теперь мы должны посолить пароль из формы авторизации:
$salt = $user['salt'];
$pass = $_POST['pass']; //это пароль, который ввел пользователь
$salted_pass = md5($salt.md5($pass.$salt.md5($salt.salt))); //солим пароль из формы авторизации

И если хеши паролей совпадают, мы можем пользователя авторизовать.
В общем, лучше использовать свои влгоритмы соления. И если вы хотите, чтобы пароли пользователей никто не украл, ВСЕГДА СОЛИТЕ ПАРОЛИ.
Если что-то непонятно, пишите, объясню :)