解密哈希sha256加密,知道盐

fra*_*a66 9 php login sha256 password-encryption

我正在为Web应用程序创建一个登录系统.要在DB中存储密码,我使用sha256加密密码,如下所示:

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

在数据库中,我存储用户,用户的密码和用于制作哈希的盐并验证用户的登录.现在我正在使用密码向用户发送电子邮件,但是当用户收到电子邮件时,由于存储在sha256加密密码中,用户会收到一个长字符串,而不是用户所谓的密码知道.

我的问题是,我有什么方法可以发送实际的用户密码和非密码加密,也就是说,如果我知道盐,有一些方法可以反向sha256?如果不可能,建议您使用何种加密方法来完成加密密钥的反转并通过电子邮件将实际密码发送给用户.

Hen*_*gmo 7

正如您的问题的评论中提到的,反转哈希不是一个真正的选择.

然而,你可以做什么,这也是其他人所做的.在您的注册代码(例如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)")
Run Code Online (Sandbox Code Playgroud)

一些粗略的示例代码.我希望它有所帮助!


Ter*_*way 5

您绝对不应该通过电子邮件发送明文密码。相反,请按照评论中的建议发送一个有时间限制的一次性“重置密码”链接。

应该使用 @Henrik 建议的简单哈希。使用标准可调整工作密码 KDF(PBKDF2、bcrypt、scrypt)

如果您可以使用 PHP 5.5,请使用标准密码哈希函数。有些主机确实支持 PHP 5.5,但您必须寻找并询问它们。

网络上有很多地方解释了如何正确执行此操作(例如https://wiki.mozilla.org/WebAppSec/Secure_Coding_Guidelines#Authentication),也有许多地方解释了如何错误执行此操作。在决定推出自己的身份验证系统之前,请花一些时间研究一下。