来自laravel docs
应用程序密钥安装Laravel后,您应该做的下一件事 将应用程序密钥设置为随机字符串。如果你安装了 Laravel通过Composer或Laravel安装程序,这个密钥已经存在 已经通过php artisan key为您设置:生成命令。
通常,此字符串的长度应为32个字符。关键可以是 在.env环境文件中设置。如果你还没有重命名 .env.example文件到.env,你现在应该这样做。 如果申请 未设置密钥,您的用户会话和其他加密数据不会 安全!
我对应用程序密钥的了解是:如果未设置应用程序密钥,通常我会收到异常。
答案 0 :(得分:12)
正如我们在EncryptionServiceProvider
中看到的那样:
public function register()
{
$this->app->singleton('encrypter', function ($app) {
$config = $app->make('config')->get('app');
// If the key starts with "base64:", we will need to decode the key before handing
// it off to the encrypter. Keys may be base-64 encoded for presentation and we
// want to make sure to convert them back to the raw bytes before encrypting.
if (Str::startsWith($key = $this->key($config), 'base64:')) {
$key = base64_decode(substr($key, 7));
}
return new Encrypter($key, $config['cipher']);
});
}
因此,使用加密的每个组件:会话,加密(用户范围), csrf令牌都会受益于app_key
。
其他问题可以通过"如何加密" (AES)工作,只需打开Encrypter.php
,并确认Laravel使用AES并将结果编码为base64。
我们可以通过使用修补程序来了解它是如何完成的:
➜ laravel git:(staging) ✗ art tinker
Psy Shell v0.8.17 (PHP 7.1.14 — cli) by Justin Hileman
>>> encrypt('Hello World!')
=> "eyJpdiI6ImgzK08zSDQyMUE1T1NMVThERjQzdEE9PSIsInZhbHVlIjoiYzlZTk1td0JJZGtrS2luMlo0QzdGcVpKdTEzTWsxeFB6ME5pT1NmaGlQaz0iLCJtYWMiOiI3YTAzY2IxZjBiM2IyNDZiYzljZGJjNTczYzA3MGRjN2U3ZmFkMTVmMWRhMjcwMTRlODk5YTg5ZmM2YjBjMGNlIn0="
注意:我使用了此密钥:
base64:Qc25VgXJ8CEkp790nqF+eEocRk1o7Yp0lM1jWPUuocQ=
来加密Hello World!
解码后得到的结果(您可以尝试使用会话解码自己的cookie):
{"iv":"h3+O3H421A5OSLU8DF43tA==","value":"c9YNMmwBIdkkKin2Z4C7FqZJu13Mk1xPz0NiOSfhiPk=","mac":"7a03cb1f0b3b246bc9cdbc573c070dc7e7fad15f1da27014e899a89fc6b0c0ce"}
要理解上面的json(iv
,value
,mac
),您需要了解AES:
.env
文件中app.php
中,实际上存储在任何git跟踪文件中明显注意:更改应用程序密钥对散列密码没有影响,因为散列算法不需要加密密钥。