Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Восстановление пароля из MD5
 
 автор: aexb   (05.03.2006 в 14:42)   письмо автору
 
 

Заранее извиняйте за возможное повторение темы, но по ключевым словам в поиске выводится около 6000 сообщений, пролистать их все выше моих сил :)

Сабж в следующем:

При регистрации на странице в базу данных заносятся логин пользователя и пароль в зашифрованном методом md5 виде. При авторизации пользователя сверяются хеши паролей и сама авторизация проходит, как говорится, на ура.

Но каким образом можно данный пароль восстановить, если пользователь его забыл (стандартная схемы "забыли пароль", используемая на многих сайтах)?

Ума не приложу.

   
 
 автор: Loki   (05.03.2006 в 14:54)   письмо автору
 
   для: aexb   (05.03.2006 в 14:42)
 

назначить ему новый. Старый-то он все равно забыл:)

   
 
 автор: aexb   (05.03.2006 в 15:03)   письмо автору
 
   для: Loki   (05.03.2006 в 14:54)
 

>назначить ему новый. Старый-то он все равно забыл:)

Не-не-не! Дело не в том, что забыл! Вопрос в том, каким образом можно изначально сохранять пароли в базу в ЗАКРЫТОМ виде, но при этом чтоб можно было их восстанавливать.

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

И, кроме того, на этом форуме пароли тоже можно восстанавливать :)

Видимо, лучше хранить пассворды в поддающемся расшифровке хешу.

   
 
 автор: Ressfourt   (05.03.2006 в 16:39)   письмо автору
 
   для: aexb   (05.03.2006 в 15:03)
 

ну так и везде при напоминании пароля , пользователю создаеться новый и отсылаеться ему , а пользователь потом заходить в систему и меняет пароль и опять же шифруеться в мд5

   
 
 автор: kasmanaft   (05.03.2006 в 18:24)   письмо автору
 
   для: aexb   (05.03.2006 в 15:03)
 

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

   
 
 автор: Trianon   (06.03.2006 в 14:12)   письмо автору
 
   для: aexb   (05.03.2006 в 15:03)
 

>Не-не-не! Дело не в том, что забыл! Вопрос в том, каким
>образом можно изначально сохранять пароли в базу в ЗАКРЫТОМ
>виде, но при этом чтоб можно было их восстанавливать.

Если их можно будет восстанавливать, их БУДУТ восстанавливать. Причем отнюдь не владельцы паролей.

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

Вот именно.

>И, кроме того, на этом форуме пароли тоже можно
>восстанавливать :)

Если этот форум довольно грязно обходится с паролями, это еще не повод брать с него в этом пример.

>Видимо, лучше хранить пассворды в поддающемся расшифровке
>хешу.

Вот как раз так пароли лучше не хранить.
Не говоря уже о том, что если вид хеш - то вид хранения необратим. А если обратим - то уже не хеш.

   
 
 автор: Football   (05.03.2006 в 14:54)   письмо автору
 
   для: aexb   (05.03.2006 в 14:42)
 

Я делал такую систему.
1) ользователь вводил при регистрации своё мыло
2) В форму вводилось мыло
3) На мыло посылалось новый пароль, он же заносился в БД.
4) Пользователь потом, если хотел, менял пароль

   
 
 автор: BAHO   (05.03.2006 в 17:15)   письмо автору
 
   для: aexb   (05.03.2006 в 14:42)
 


<?
if(!defined("F_MOD"))
  {
  echo 
"<meta http-equiv='refresh' content='0; url=index.php'>";
  exit;
  }

if(
$action=="forget")
  {
  
$query_forget=MYSQL_QUERY("SELECT login, mail FROM users WHERE mail='$mail' and login='$login'");
  
$num=mysql_num_rows($query_forget);
  if(
$num!=0)
    {
    list(
$login_user$mail_user)=mysql_fetch_row($query_forget);
    if(
$login_user==$login)
      {
      
$input=array( "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9");
      
$rand_keys=array_rand($input,10);
      
$pass_user="";
      for(
$i=0;$i<10;$i++)
        {
        
$pass_user.=$input[$rand_keys[$i]];
        }
      
$subject="Восстановление пароля";
      
$content="Восстановление пароля<br>";
      
$content.="Ваш логин: $login <br>";
      
$content.="Ваш пароль: $pass_user<br><br>";
      
mail($mail_user,$subject,$content);
      
$pass_user=md5($pass_user);
      
$query_upd="update users set pass='$pass_user' where login='$login'";
      if(
mysql_query($query_upd))
        {
        echo
"На указанный e-mail отправлено письмо с вашим новым паролем";
        }
      }
    else
      {
      echo
"Произошла ошибка! Нет соответствий!";
      }
    }
  else
    {
    echo
"Произошла ошибка! Нет соответствий!";
    }
  }
else
  {
?>
  <form action="forget.php" method="post">
  <table cellpadding=3 cellspacing=0 width=100% border=0>
  <tr>
  <td valign=top><span class=head>Восстановление пароля</span></td>
  </tr>
  <tr>
  <td valign=top>
  Для получения забытого пароля введите Ваш e-mail и логин, указанные при регистрации.
  На E-Mail будет выслано   письмо, содержащее новый пароль!</td>
  </tr>
  <tr>
  <td valign=top>
  <input type="hidden" name="action" value="forget">
  Ваш e-mail: <br>
  <input type="text" name="mail" size="20"></td>
  </tr>
  <tr>
  <td valign=top>
  Ваш логин: <br>
  <input type="text" name="login" size="20"></td>
  </tr>
  <tr>
  <td valign=top>
  <input type="submit" value="Принять"></td>
  </tr>
  </table>
  </form><?
  
}
?>


нормльный код, пользуюсь сам.. :)

   
 
 автор: Kusuk   (06.03.2006 в 09:44)   письмо автору
 
   для: aexb   (05.03.2006 в 14:42)
 

Можно поступить брутально )))
Выдернуть из БД мд5 и организовать огромный цикл.
А в цикле генерировать строки и проверять их мд5 с мд5 из БД!
Парвда это очень долго )))
Да и врядли получится ))

   
 
 автор: BAHO   (06.03.2006 в 11:34)   письмо автору
 
   для: Kusuk   (06.03.2006 в 09:44)
 

а потом скрипт возьмёт и завсинет, перестанет работать через 30 секунд, потом поставим set_time_limit на миллион и повешаем весь сервак ;)

   
 
 автор: dobryy   (06.03.2006 в 22:24)   письмо автору
 
   для: aexb   (05.03.2006 в 14:42)
 

если еще надо
http://nsd.ru/soft.php?group=hacksoft&razdel=passwords
там скачаешь MD5inside 1.0
ну а дальше розберешся

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования