Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Расшифровка md5


Автор: abalich 18.6.2007, 11:47
У меня в базе данных в таблице хранится пароль зашифрованный в MD5;
Код

INSERT INTO `register` (`password`, `e-mail`) VALUES (MD5('пароль'), 'mail@mail.ru')

ВОт!!! У меня на сайте есть система восстановление забытого пароля:
Вводишь свой e-mail и на него приходит пароль!!
НО КАК МНЕ ЕГО РАСШИФРОВАТЬ ЕСЛи ОН В MD5!!!???

Автор: GZep 18.6.2007, 11:53
Ничего не надо расшифровывать!

Для этих целей отсылай новый рандомно сгенерированный пароль.

Автор: abalich 18.6.2007, 11:57
НУ понимаешь!! Ведь любой юзер может ввести логин и e-mail другого юзера!!!!!!

Автор: GZep 18.6.2007, 11:59
правильно, поэтому надо email'ы прятать. smile

Добавлено через 1 минуту и 43 секунды
или при востановлении пароля прислать юзеры ссылку, ведущую на страницу где пользователь сможет сам ввести новый пароль. Естественно ссылка эта будет защищена сесиями или любым другим подобным механизмом.

Автор: abalich 18.6.2007, 12:04
Ну впринципе ты ПРАВ:
Цитата

правильно, поэтому надо email'ы прятать

Цитата

будет защищена сесиями

КАК ЭТО????

А все же можно как-то обратно расшифровать?

Автор: vasac 18.6.2007, 12:11
http://ru.wikipedia.org/wiki/Md5, это хеш, он не расшифровывается. Сходив в поиск по запросу "расшифровка md5" вы могли бы это узнать.
Цитата

Ведь любой юзер может ввести логин и e-mail другого юзера!!!!!! 

Да, но пароль уйдет на мыло того самого другого юзера к которому злоумышленник не имеет доступа.

Автор: abalich 18.6.2007, 12:14
Цитата

Да, но пароль уйдет на мыло того самого другого юзера к которому злоумышленник не имеет доступа. 

Да, но ведь речь шла о том, что пароль генерируется новый и высылается на мыло!!! Т.е любой может поменять пароль другому!!!!!!

Автор: sTa1kEr 18.6.2007, 12:18
Цитата(abalich @  18.6.2007,  12:04 Найти цитируемый пост)
КАК ЭТО????

Генерируешь уникальный ключ и сохраняешь где-нибудь связку логин - email - этот ключ. Затем высылаешь на email письмо ссылкой, в которой в качестве параметра будет передаваться этот уникальный ключ. Если это сам пользователь запросил смену пароля, то он кликает и на сервер приходит запрос с ключом. Сравниваешь ключ который сохранил ранее и присланный пользователем, если они совпадают, то генерируешь пароль и высылаешь его на email.

Цитата(abalich @  18.6.2007,  12:04 Найти цитируемый пост)
А все же можно как-то обратно расшифровать? 

В принципе не возможно. MD5 - это одностороннее шифрование, по сути всего лишь хэш пароля. Максимум что возможно - это найти коллизию методом перебора или другими словами найти строчку, MD5 хэш которой будет совпадать с хэшом старого пароля. Но я думаю, что это вам не надо smile

Автор: abalich 18.6.2007, 12:23
Цитата

Генерируешь уникальный ключ

ГДЕ его лучше сохранить!!!!!?????
И кстати как его генить!!!!!Можно пример!!! ПЛИЗЗ!!!

Автор: Serkys 18.6.2007, 12:32
Цитата(abalich @  18.6.2007,  12:23 Найти цитируемый пост)
ГДЕ его лучше сохранить!!!!!?????

Можно в отдельной таблице.

Цитата(abalich @  18.6.2007,  12:23 Найти цитируемый пост)
И кстати как его генить!!!!!Можно пример!!!

Код

$key = rand(0, 9999) . rand(0, 9999);

Автор: abalich 18.6.2007, 12:36
А если с БУКВАМИ!!!

Автор: Serkys 18.6.2007, 12:40
Цитата(abalich @  18.6.2007,  12:36 Найти цитируемый пост)
А если с БУКВАМИ!!!

Хватит кричать.
Код

$key = md5(rand(0, 9999));

Автор: abalich 18.6.2007, 12:44
Цитата

$key = md5(rand(0, 9999));

Спасибо!!!!!

Автор: sTa1kEr 18.6.2007, 12:53
Цитата(abalich @  18.6.2007,  12:23 Найти цитируемый пост)
ГДЕ его лучше сохранить!!!!!?????

Да где угодно, БД, файл...
Цитата(abalich @  18.6.2007,  12:23 Найти цитируемый пост)
И кстати как его генить!!!!!Можно пример!!! ПЛИЗЗ!!! 

Вот вам простейший пример. Скрипт где запрашиваем восстановление пароля:
Код

// Для простоты предположим что мыло и логин одно и тоже
$email = "vasya@pupkin.ru"; // $POST["requireEmail"]; // Мыло пользователя
$key = md5(uniqid($email, true));
file_put_contents("require_passwords/$email", $key);
mail($email, "Пароль восстанавливать будем?", "Вы действительно хотите восстановить пароль? Тогда вам сюда ==> http://site.ru/recovery.php?email=$email&key=$key");

Скрипт, где проверяем ключ:
Код

$email = $_GET["email"];
$clientKey = $_GET["key"];
if (file_exists("require_passwords/$email") && file_get_contents("require_passwords/$email") == $clientKey)
{
   echo "Ok. Ждите... Пароль уже высылаем.";
   // меняем и высылаем новый пароль
}
else
{
   echo "Хотим чужой пароль сменить? А ну кыш от сюда!!!";
}


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

Автор: GZep 18.6.2007, 22:44
я бы посоветовал использовать сессии...

Автор: abalich 19.6.2007, 20:12
Цитата

я бы посоветовал использовать сессии... 

ПРИМЕР можешь показать!!!???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)