Laravel 使用多少成本/轮次进行哈希?

问题描述 投票:0回答:3

我试图了解 Laravel 4.2 中 BcryptHasher.php 文件中的以下函数是如何工作的:

/**
     * Hash the given value.
     *
     * @param  string  $value
     * @param  array   $options
     * @return string
     *
     * @throws \RuntimeException
     */
    public function make($value, array $options = [])
    {
        $cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;

        $hash = password_hash($value, PASSWORD_BCRYPT, ['cost' => $cost]);

        if ($hash === false) {
            throw new RuntimeException('Bcrypt hashing not supported.');
        }

        return $hash;
    }

我想我什么都懂,除了这句话:

$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;

我知道 $this->rounds 的默认值设置为 10,这就是密码哈希值的“成本”。但是,我对 $options 数组正在做什么以及这可能如何影响成本感到困惑?

php laravel laravel-4 laravel-5 laravel-5.1
3个回答
8
投票

调用

make
方法时可以传入选项。

例如,使用门面:

$hashed = Hash::make($value, ['rounds' => 8]);

如果你不传入

cost
,它将使用
$this->rounds
,即
10


2
投票

在 laravel 5.5 及之前版本中,因为哈希轮数在这些版本中是硬编码的,所以没有办法,除非您构建一个外观或服务来根据您的需要处理默认的哈希轮数,然后使用包装类而不是原始的 Hash 类。

但是,从 Laravel 5.6 开始,默认的哈希轮数存储在

config/hashing.php
文件中,您可以使用本节或在
BCRYPT_ROUNDS
文件中设置
.env
环境变量将默认值更改为您想要的值。

/*
|--------------------------------------------------------------------------
| Bcrypt Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Bcrypt algorithm. This will allow you
| to control the amount of time it takes to hash the given password.
|
*/

'bcrypt' => [
    'rounds' => env('BCRYPT_ROUNDS', 10),
],

0
投票

作为对 adnan 答案的补充,在 laravel ^10 中,他们将默认的 bcrypt 轮次从 10 更改为 12(检查拉取请求)。 所以:

/*
    |--------------------------------------------------------------------------
    | Bcrypt Options
    |--------------------------------------------------------------------------
    |
    | Here you may specify the configuration options that should be used when
    | passwords are hashed using the Bcrypt algorithm. This will allow you
    | to control the amount of time it takes to hash the given password.
    |
    */

    'bcrypt' => [
        'rounds' => env('BCRYPT_ROUNDS', 12),
        'verify' => true,
    ],
© www.soinside.com 2019 - 2024. All rights reserved.