【问题标题】:How do I use md5 instead of bcrypt?如何使用 md5 代替 bcrypt?
【发布时间】:2017-06-29 20:00:24
【问题描述】:

我需要使用md5() 而不是bcrypt() 来存储密码。但是当我这样做时:

protected function create(array $data)
{
    return Account::create([
        'username' => $data['username'],
        'email' => $data['email'],
        'password' => md5($data['password']),
        'datetoday' => Carbon::now(),
        'lastip' => request()->ip(),
        'confirmation' => bcrypt($data['password']),
    ]);
}

当我尝试登录时,它说凭据错误。

【问题讨论】:

  • 虽然使用 MD5 对密码进行哈希处理是一个可怕的、可怕的想法,但您需要使用相同的方法来解密和加密密码(您仍然有 bcrypt 在确认中)。
  • 为什么需要? md5() 不太安全。
  • 投反对票的原因是什么?我别无选择,只能使用 md5 使其工作。
  • 更安全的方法是使用 bcrypt 进行自己的登录,并在用户登录时将密码的 MD5 哈希值临时保存在内存中。这样您仍然可以在需要时使用 MD5,但可以安全地存储密码。
  • @SinanSamet 这真的值得牺牲用户的安全吗?

标签: laravel authentication


【解决方案1】:

使用 MD5 不再是一个好主意。

要摆脱旧的 MD5 记录,您可以在这里使用第二个技巧:http://john.cuppi.net/migrate-from-md5-to-bcrypt-password-hashes/

【讨论】:

    【解决方案2】:

    你必须创建新的服务提供者。

    app/providers/md5hashprovier.php

    namespace App\Providers;
    class MD5HashProvider extends \Illuminate\Hashing\HashServiceProvider
    {
        public function boot()
        {
        \App::bind('hash', function () {
            return new \App\Classes\MD5Hasher;
        });
    }}
    

    接下来您必须创建 MD5Hasher 类。我建议将其定位到 应用程序/类/MD5Hasher.php

    class MD5Hasher extends BcryptHasher
    {
    public function check($value, $hashedValue, array $options = array())
       {
          $user = User::wherePassword(md5($value))->first();
          return $user ? true : false
        }
    }
    

    并将您的新服务提供者注册到 providers 数组中的 config/app.php

    \App\Providers\MD5HashProvider::class,
    

    这将使用 md5 密码启用身份验证

    【讨论】:

    • 我也试过了,但仍然无法登录。它说凭据错误
    • 我从项目中获取了这个。 try to die('asd') - asd 出现了吗?如果没有 - 你错过了什么
    • 对于任何想知道为什么 MD5Hasher 类不起作用的人,您需要包括这些: namespace App\Classes;使用 Illuminate\Hashing\BcryptHasher 作为 BcryptHasher;使用 App\User 作为用户;
    • 如果多个用户使用相同的密码会怎样?仅搜索散列密码,与用户名/电子邮件有任何关系吗?
    【解决方案3】:

    不推荐使用 md5() 而不是 bcrypt()。

    但是您可以手动验证用户身份。在 LoginController 中覆盖 login() 方法

      public function login(Request $request)
      {
         $user = User::where('username', $request->username)
                      ->where('password',md5($request->password))
                      ->first();
         Auth::login($user);
         return redirect('/');
      }
    

    【讨论】:

    • @SinanSamet 覆盖 login()
    • 是的,它会起作用,是的,它会危及用户安全。帮忙是个好主意吗?
    • 它告诉我Class 'Illuminate\Foundation\Auth' not found,而我告诉我use Illuminate\Foundation\Auth;
    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2013-04-24
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多