Php 使用bcrypt获取密码-忘记密码电子邮件

Php 使用bcrypt获取密码-忘记密码电子邮件,php,mysqli,bcrypt,Php,Mysqli,Bcrypt,我最近为用户密码实现了bcrypt。我已经设法在用户注册时获得了散列密码,他们可以通过相互比较,使用注册的密码(而不是散列版本)登录到自己的帐户。我的问题是-我正在处理一个忘记密码的电子邮件页面,该页面会向用户发送一封电子邮件,说明他们的密码,但它会发送散列版本。有没有什么方法可以让我说出旧的方法或者这是不可能的?我知道这不是很安全,但这只是一个小的个人项目,我正在完成,是不是生活 这是我的forget.php <?php if (isset($_POST['email'])){ $ema

我最近为用户密码实现了bcrypt。我已经设法在用户注册时获得了散列密码,他们可以通过相互比较,使用注册的密码(而不是散列版本)登录到自己的帐户。我的问题是-我正在处理一个忘记密码的电子邮件页面,该页面会向用户发送一封电子邮件,说明他们的密码,但它会发送散列版本。有没有什么方法可以让我说出旧的方法或者这是不可能的?我知道这不是很安全,但这只是一个小的个人项目,我正在完成,是不是生活

这是我的forget.php

<?php
if (isset($_POST['email'])){
$email = $_POST['email'];
$sql="select * from user where email='$email'";
$result   = mysqli_query($mysqli_conn, $sql);
$count=mysqli_num_rows($result);

if($count==1)
{
    $rows=mysqli_fetch_array($result);
    $pass  =  $rows['password'];//FETCHING PASS
    //echo "your pass is ::".($pass)."";
    $to = $rows['email'];
    //echo "your email is ::".$email;
    //Details for sending E-mail
    $from = "Website";
    $url = "www.website.com";
    $body  =  "Password recovery
    -----------------------------------------------
    Url : $url;
    <br> Your email details: $to;
    <br>Here is your password  : $pass;
    <br><br>Sincerely,
    Find-a-room";
    $from = "myemail@email.com";
    $subject = "Password recovered";
    $headers1 = "From: $from\n";
    $headers1 .= "Content-type: text/html;charset=iso-8859-1\r\n";
    $headers1 .= "X-Priority: 1\r\n";
    $headers1 .= "X-MSMail-Priority: High\r\n";
    $headers1 .= "X-Mailer: Just My Server\r\n";
    $sentmail = mail ( $to, $subject, $body, $headers1 );
   } else {
if ($_POST ['email'] != "") {
echo "<span> Not found your email in our database</span>";
    }
    }


if($sentmail==1)
{
    echo "<span style='color: #ff0000;'> Your Password Has Been Sent To Your 
Email Address.</span>";
}
    else
    {
    if($_POST['email']!="")
    echo "<span style='color: #ff0000;'> Cannot send password to your e-mail 
address.Problem with sending mail...</span>";
}
}
?>

<form action="" method="post">
    <label> Enter your User ID : </label>
    <input id="email" type="text" name="email" />
    <input id="button" type="submit" name="button" value="Submit" />
</form>

散列使用单向算法,因此您无法执行此操作,我也不建议以纯文本形式发送密码。

如果您对密码进行散列(您应该这样做),则无法再将其发送给用户。相反,创建一个一次性令牌,允许用户设置新密码并将此令牌发送给用户。不,除非您将其保存为不可加密的格式(这是一个坏主意),否则您不能。散列值是不可逆的。如果您的意思是发送旧值,就像明文中的旧密码一样,散列是一种方式,那么您不能(或者至少应该不能)解密它。您真正想做的是向他们发送一个链接,他们可以访问该链接重置在特定时间/完成后过期的密码。此链接是否仅基于发送电子邮件的用户ID@如果你仔细想想,如果你有一个链接,比如
example.com/reset password.php?id=55
,然后你把它发送给用户,有什么能阻止他们仅仅把id从55改为1,或者其他数字呢。谷歌上有很多比我更聪明的人,他们提供了重置密码的一次性链接解决方案,一个很好的起点可能是阅读