【问题标题】:How to decrypt Hash Password in Laravel如何在 Laravel 中解密哈希密码
【发布时间】:2015-12-18 12:00:54
【问题描述】:

我用谷歌搜索了很多,但不幸的是没有找到可行的解决方案。

我知道这是一种不好的技术,但我需要通过电子邮件将其密码发送给用户。

我已成功发送用户哈希密码,但我无法解密此密码。

以下是我正在使用的程序。

    $results = DB::select("select * from dockl_users where email='" . Input::get('email')  ."';");      

                foreach($results as $data){
                $password=          $data->password;
                $email=             $data->email;

               }

            Mail::send('passwordRecovery', array('email' =>$password), function($message)
            {
                $message->to(Input::get('email') )->subject('Password Recovery');
            });

上面的代码通过电子邮件将Encrypted密码发送给用户,但是当我尝试解密时,它给了我以下错误消息。

$decrypt= Crypt::decrypt($data->password);  

无效数据。

throw new DecryptException("Invalid data.");

请指导我如何实现这一目标..

【问题讨论】:

  • 哈希是单向,不提供解密方法。您应该向用户发送一个链接以重置其密码。
  • 您永远不能存储用户的文字密码。永远,永远。
  • 是的,这是可能的。不要,不要,不要,不要,不要那样做。这是一个重大的安全问题。
  • @Kirmani88:如果您将密码存储机制从哈希更改为加密,那么是的,您可以取回用户的密码,但是您正在创建一个不安全的网站。不要那样做。
  • 如果您这样做,我们都承诺破解您的网站。 ¯\_(ツ)_/¯

标签: php laravel encryption


【解决方案1】:

简短的回答是您不“解密”密码(因为它没有加密 - 它是散列的)。

长答案是您不应该通过电子邮件或任何其他方式向用户发送密码。如果用户忘记了密码,您应该向他们发送密码重置电子邮件,并允许他们在您的网站上更改密码。

Laravel 内置了大部分此类功能(请参阅 Laravel documentation - 我不会在这里全部复制。也适用于 Laravel 的 4.25.0 版本)。

如需进一步阅读,请查看此“blogoverflow”帖子:Why passwords should be hashed

【讨论】:

    【解决方案2】:

    为了将散列密码与纯文本密码字符串进行比较,您可以使用 PHP password_verify

    if(password_verify('1234567', $crypt_password_string)) {
        // in case if "$crypt_password_string" actually hides "1234567"
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多