【问题标题】:How can i hash username in Laravel我如何在 Laravel 中对用户名进行哈希处理
【发布时间】:2020-07-20 10:03:37
【问题描述】:

我使用 Laravel 身份验证并希望对所有用户数据进行哈希处理。 如何在 Laravel 中对用户名进行哈希处理并在登录页面中像密码一样解码?

我像这样编辑了注册控制器

 protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'username' => bcrypt($data['username']),
            'password' => bcrypt($data['password']),
        ]);
    }

【问题讨论】:

  • 为什么要散列所有用户数据?如果您问的是如何做到这一点,那么您可能没有考虑过为什么首先需要这样做以及它是否真的是一个好主意。现实情况是,如果您被入侵以获取您的数据库,那么假设他们也可能破坏您的项目并不遥远。如果是这种情况,他们将获得您的 app_key,从而能够解密您的数据库。

标签: laravel hash passwords


【解决方案1】:

哈希不同于编码/解码。哈希是一个单向过程,而解码/编码是一个双向过程。

对于 Hash,一旦对某事物进行哈希处理后,您将无法再获得原始值,但是,如果您使用相同的值并再次进行哈希处理,您将得到相同的哈希结果。

对于解码/编码,您可以取回原始值。

在Laravel 默认情况下,密码是散列而不是加密或编码的。

所以,散列用户名是个坏主意。一旦经过哈希处理,您将永远不会知道用户名是什么。

【讨论】:

    【解决方案2】:

    是的,哈希是单向进程,但您可以对相同类型的进程使用加密。

    use Illuminate\Support\Facades\Crypt;
    
    $encrypted = Crypt::encryptString('Hello world.');
    
    $decrypted = Crypt::decryptString($encrypted);
    

    接收加密值的非 PHP 客户端将需要反序列化数据。如果你想在不序列化的情况下加密和解密值,你可以使用 Crypt 门面的 encryptString 和 decryptString 方法。

    所以总是使用 Crypt Facade,因为所有东西都会自动在后台运行。

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2011-04-25
      相关资源
      最近更新 更多