我正在为Web应用程序创建登录系统。要将密码存储在数据库中,我使用sha256加密密码,如下所示:

$salt ="sometext";
$escapedPW="userpass";
$saltedPW =  $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
echo "<center>".$hashedPW."</center>";

我在数据库中存储用户,用户密码和用于进行哈希并验证用户登录名的盐。现在,我正在执行向用户发送包含您的密码的电子邮件的功能,但是当用户收到电子邮件时,由于存储在sha256加密密码中,因此用户会收到一个长字符串,而不是该用户应使用的密码要知道。

我的问题是,有什么方法可以向您发送实际的用户密码,而不向您发送非密码加密,即,如果我知道盐的话,有某种方法可以执行与sha256相反的操作?如果不可能,建议您使用哪种加密方法来完成加密 key 的反向操作,并将实际密码通过电子邮件发送给用户。

最佳答案

正如您对问题的评论中提到的那样,反向散列实际上不是一种选择。

但是,您可以做的是,其他人也一样。在您的表单发给您的注册码(例如register.php)中,可以使PHP脚本通过电子邮件发送密码,然后对其进行加密并将其存储在数据库中。

我想您有某种注册表格,据说该表格将新用户的详细信息发布到另一个(或相同的)PHP脚本中,不是吗?

例如,如果我的表单说了类似<form method="post" action="register.php">的内容

然后在register.php中,我会得到类似

<?php
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']); /*cleartext*/
$email    = mysql_real_escape_string($_POST['email']);

mail($email,"New account","Your username \"$username\" and your password is \"$password\"");

$salt ="sometext";
$escapedPW="userpass";
$saltedPW =  $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);

mysql_query("INSERT INTO users (username, password, email) VALUES ($username, $hashedPW, $email)")

一些粗略的示例代码。希望对您有所帮助!

09-10 10:23
查看更多