如何重新存储存储在我的数据库中的密码? (PHP)

时间:2011-01-16 19:47:14

标签: php md5

我在我的数据库中加密了一些密码,我想找到一种方法来显示它们。以下是它们如何保存到我的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保存到我的数据库中。

任何人都有想法?

非常感谢你;)

5 个答案:

答案 0 :(得分:9)

您绝不能显示密码 您绝不能显示密码 您绝不能显示密码。

对密码进行哈希处理的全部目的是使其无法实现。

由于你使用的是一种有点不安全的哈希值,这有点不太可能,但你仍然无法做到。

您应该使用SHA512而不是SHA1来使这更加不可能。

答案 1 :(得分:3)

密码哈希的意义在于,它几乎不可能扭转操作。所以基本上这里的答案是否定的,你不能。

答案 2 :(得分:1)

有无数个值会产生任何单个哈希值,因此无法确定地重现所提供的原始密码。

但您可以通过以下方法之一显示工作密码:

Cavet:显然,如果安全对你很重要,你应该不做以上任何事情。如果您想允许忘记密码的用户,我建议您阅读有关密码重置的信息。

答案 3 :(得分:0)

您通过SHA1运行它们 - 原始密码被破坏,并且无法通过任何实际方法恢复。您可能会尝试找到另一个产生相同SHA1的字符串,但这比它的价值要多。

答案 4 :(得分:0)

你无法反转哈希函数...你还有两个选择:

1强制用户插入新密码或...

2当用户再次登录系统时更新哈希值(您可以强制启动cookie和会话,允许用户登录而无需重新输入密码)。此解决方案将允许您的用户使用旧哈希登录,同时您将旧哈希更新为新哈希。下次用户登录时,脚本将使用新版本的哈希来登录用户。

在这个例子中,我使用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和会话,那么它也可以......更改将在超时发生。没有人会注意到这种变化。