![](/img/trans.png)
[英]How can I rehash my stored passwords which is stored in Database using md5?
[英]How to ReHash a password stored into my Database ? (PHP)
我的数据库中已加密了一些密码,我想找到一种显示密码的方法。 这是它们如何保存到我的mysql数据库中的方法:
function generateHash($plainText, $salt = null){
if ($salt === null)
{
$salt = substr(md5(uniqid(rand(), true)), 0, 25);
}
else
{
$salt = substr($salt, 0, 25);
}
return $salt . sha1($salt . $plainText);
}
$secure_pass = generateHash($this->clean_password);
然后$ secure_pass保存到我的数据库中。
任何人都会有一个主意?
非常感谢你 ;)
您绝不能显示密码。
您绝不能显示密码。
您绝不能显示密码。
散列密码的全部目的是使此操作变得不可能。
由于您使用的是某种不安全的哈希,因此不太可能,但仍然无法做到。
您应该使用SHA512而不是SHA1来使此操作变得更不可能。
密码哈希的要点是它不可能逆向操作。 因此,基本上,这里的答案是否定的,你不能。
有无数个会产生任何哈希值的值,因此无法确定地复制给出的原始密码。
但是,您可以通过以下方法之一显示工作密码:
Cavet:显然,如果安全性对您很重要,则您不应执行上述任何一项操作。 如果您想允许忘记密码的用户,建议您阅读有关密码重置的信息。
你不能反向推散列函数...留下了两个选择:
1强制用户插入新密码或...
2在用户再次登录到系统时更新哈希(您可以强制执行cookie和允许用户登录而无需重新输入密码的会话)。 该解决方案将允许您的用户使用旧哈希来登录,同时您将旧哈希更新为新哈希。 下次您的用户登录时,脚本将使用新版本的hash来登录用户。
在此示例中,我将md5用作哈希,我想使用cost = 12更新到BCRYPT,但可以随时将其更改为所需的值。 从BCRYPT成本= 10更改为BCRYPT成本= 12也可以,也可以是任何其他组合。 考虑以下示例:
$passwordFromDatabase = "0d107d09f5bbe40cade3de5c71e9e9b7"; // md5 hash of "letmein"
$passwordFromForm = $_POST['password']; // $_POST['password'] == "letmein"
if(password_needs_rehash($passwordFromDatabase, PASSWORD_BCRYPT, ["cost" => 12]) && md5($passwordFromForm) === $passwordFromDatabase){
// generate new password
$newPasswordHash = password_hash($passwordFromForm, PASSWORD_BCRYPT, ["cost" => 12]);
// update hash from databse - replace old hash $passwordFromDatabase with new hash $newPasswordHash
// after update login user
if(password_veryfi($passwordFromForm, $newPasswordHash)){
// user has loged in successfuly and hash was updated
// redirect to user area
}else{
// ups something went wrong Exception
}
}else{
if($password_veryfi($passwordFromForm, $passwordFromDatabase)){
// user password hash from database is already BCRYPTed no need to rehash
// user has loged in successfuly
// redirect to user area
}else{
// wrong password
// no access granted - stay where you are
}
}
我更喜欢第二种选择:)。 自行选择。 如果您选择第二个选项,并且选择不踢出允许用户在不提供密码的情况下登录的cookie和会话,那也可以...更改将随着时间的流逝而发生。 而且没有人会注意到这一变化。
您已经通过SHA1运行了它们-原始密码已被破坏,并且无法通过任何实际方法恢复。 您可以尝试查找另一个产生相同SHA1的字符串,但这要花很多功夫。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.