2016-08-30 2 views
3

Мой код работает нормально, но проблема заключается в том, что пароль, полученный из базы данных MySQL после нажатия кнопки отправки, аналогичен тому, который хранится в базе данных в формате MD5, например e10adc3949ba59abbe56e057f20f883e, и хорошо доставлен во входящие. Но бесполезно из-за хэш-формата.Как получить фактический пароль через забыли пароль в php?

Вот мой рабочий код; могу ли я расшифровать его перед отправкой его пользователям? Я храню пароль в формате MD5 в базе данных MySQL. Я получил электронную почту как «Ваш пароль: e10adc3949ba59abbe56e057f20f883e»

Html код:

<body> 
<h1>Forgot Password<h1> 
<form action='#' method='post'> 
<table cellspacing='5' align='center'> 
<tr><td>Email id:</td><td><input type='text' name='email'/></td></tr> 
<tr><td></td><td><input type='submit' name='submit' value='Submit'/></td></tr> 
</table> 
</form> 

Php код:

<?php 
if(isset($_POST['submit'])) 
{ 
    $servername = "localhost"; 
    $username = "username"; 
    $password = "password"; 
    $dbname = "testdb"; 

    // Create connection 
    $conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if (!$conn) 
{ 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$email=$_POST['email']; 

$sql = "select * from users where email='".$email."' "; 
$q = mysqli_query($conn, $sql); 

$p=mysqli_affected_rows(); 
if($p!=0) 
{ 
    $res=mysqli_fetch_array($q); 
    $to=$res['email']; 
    $subject='Remind password'; 
    $message='Your password : '.$res['password']; 
    $headers='From:[email protected]'; 
    $m=mail($to,$subject,$message,$headers); 
    if($m) 
{ 
    echo'Check your inbox in email'; 
} 
else 
{ 
    echo'email is not send'; 
} 
} 
else 
{ 
    echo'You entered email id is not present'; 
} 
} 
?> 
</body> 
+4

Вместо отправки старого пароля отправьте ссылку сброса пароля для установки нового пароля. –

+1

Не напоминайте пользователю свой старый пароль. Просто создайте новый пароль для пользователя и дайте ему ссылку для сброса пароля с помощью одного пароля. –

+0

Хорошо, можете ли вы представить себе, как это реализовать? – John120

ответ

2

Вы не можете расшифровать пароль MD5. Процесс, который вы можете выполнить следующие действия:

  • Отправить по электронной почте пользователю со ссылкой
  • Open, которые связывают с новой формой после проверки, если клиент использует verfiied используя идентификатор электронной почты и маркер.
  • Дайте 2 текстовых поля, чтобы обновить его пароль/установить новый пароль.

Надеюсь, это поможет!

+0

Да звучит хорошо, я думаю, что хочу что-то сделать Google из-за меньшей продолжительности. Я хочу как можно скорее реализовать его. в любом случае, можете ли вы рассказать мне какую-либо ссылку или какую-то информацию о том, как ее реализовать? – John120

+1

Попробуйте следующее: http://www.phpgang.com/how-to-create-forget-password-form-in-php_381.html –

+1

Спасибо @Harwinder Singh Я просто решаю проблему с забытым паролем от просмотра некоторых видеороликов YouTube, изучения некоторые учебные пособия и, как ни странно, вашу предложенную ссылку. – John120

1

Хэш функция один путь и не обратимым, и это точно причина хэша используется для хранения паролей. Я бы не рекомендовал его, но если вы уже настроены на отправку существующего пароля и не создаете новый, что было бы лучше всего, вам нужно хранить пароли с помощью обратимой функции или в виде чистого текста. Самый безопасный способ - создать токен и отправить ссылку, содержащую токен на почту, которая позволяет пользователю временно войти в систему, чтобы он сам мог выбрать пароль. Таким образом, вам не нужно отправлять пароль по почте.