2016-01-03 3 views
3

У меня, может быть, litle глупо спросить ... Я делаю забытый сценарий пароля (конечно, для системы входа), но я застрял. Я создал код (он работает, да!) Со специальным идентификатором, но я не могу его расшифровать ... Можете ли вы мне помочь?Сценарий забытого пароля с PDO (требуется дешифрование)

Вот моя функция создания специального ID:

Recovery_Script.php

<?php 

include "pdo.php"; if(isset($_POST["submit"]) AND isset($_POST["ForgotPassword"])) { 

$email = $_POST["ForgotPassword"]; 
// Check to see if a user exists with this e-mail 
$sql = "SELECT email FROM account WHERE email=:email"; 
$stmt = $db->prepare($sql); 
$stmt->execute(array(":email"=>$email)); 
$items = $stmt->fetchAll(); 
$db = null; 
foreach($items as $data){ 
     if($data["email"] == $email){ 
     // Create a unique salt. This will never leave PHP unencrypted. 
     $salt = "498#2D83B631%3800EBD!801600D*7E3CC13"; 

     // Create the unique user password reset key 
     $password = hash('sha256', $salt.$email); 

     // Create a url which we will direct them to reset their password 
     $pwrurl = "http://student.sps-prosek.cz/~kocvaja14/Project/SelfMade/templates/script/recovery_password.php?q=".$password; 

     // Mail them their key 
     $mailbody = "Dobrý den,\n\nJestli tento email nepatří vám, prosím, ignorujte jej. Byla vytvořena žádost o obnovení hesla na webové stránce http://student.sps-prosek.cz/~kocvaja14/SelfMade/\n\nPro obnovení hesla klikněte na odkaz níže. \n\nThanks,\nThe Administration"; 
     mail($email, "http://student.sps-prosek.cz/~kocvaja14/Project/SelfMade/index.php - Password Reset", $mailbody); 
     echo "Your password recovery key has been sent to your e-mail address."; 

} else 
    echo "No user with that e-mail address exists."; 
     } }?> 

А теперь мне нужно создать файл, где я расшифрует этот идентификатор ($ пароль). Но я не могу этого сделать (потому что у меня мало знаний об этом). Можете ли вы мне помочь? Спасибо !

+2

Объясните * «но я не могу его расшифровать» * для нас пожалуйста. Кстати, хеши односторонние, если вы хотите построить корову из молотого мяса. –

+0

Шаш-файл hash _cannot_ будет расшифрован. Это односторонний хеш, а не обратимо зашифрованная строка. Хэши производят одну и ту же строку хэша для данного входа, поэтому используются для сравнения, если входная строка, когда хешируется с тем же алгоритмом, соответствует хешу, который вы сохранили. –

+0

* Конечно * вы не можете «расшифровать» хешированный пароль. В этом-то и дело*. Разрешить пользователю сбрасывать пароль, но вы никогда не сможете его восстановить. – David

ответ

3

Невозможно расшифровать значение хэширования.

Что вам нужно сделать, это отказаться от идеи пароля восстановления, но вместо того, чтобы построить сброса пароля системы.

Один из способов сделать это что-то вроде этого:

  1. В вашей таблице пользователей, добавьте колонку для «reset_hash» (хороший длинный хэш строки)
  2. Когда пользователь запрашивает сброс пароля, построить хешированное значение и сохранить его в своей записи. Затем, по электронной почте, отправьте ссылку, которая включает в себя, что «reset_hash» как часть URL-адреса.
  3. Когда пользователь следует за URL-адресом, проверьте, существует ли хэш в таблице пользователя. Если да, укажите форму, в которой пользователь может изменить свой пароль.

Дополнительные меры предосторожности, которые следует рассмотреть, возможно, в том числе с использованием Нонс, и проверка Nonce, который является одним из способов вы можете привести ссылку истекает через X часов (одноразовые действительны только в течение определенного периода времени).

Смежные вопросы