Laravel 的加密机制使用 OpenSSL 提供 AES-256 和 AES-128 的加密
1. 使用方法
- 首先是生成秘钥。要需要在
.env
目录里提供APP_KEY,这个如果没有的话,可以通过命令php artisan key:generate
生成,也可以自己设置。生成后例子应该是这样的
APP_KEY=base64:5BM1BXGOBrGeeqJMAWJZSzyzh5yPcCGOcOGPtUij65g=
- 在文件配置加密key和加密算法,在
config/app.php
的目录里有配置
$ 'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
- 使用方法,在laravel里已经有使用方法了,这里就不在过多的说了。主要使用的两个方法,一个是
encrypt
的加密,一个是decrypt
的解密
2. 查找加密解密的文件
实现方法的位置是在vendor/illuminate/encryption/
的目录下发现两个文件,一个是EncryptionServiceProvider
另外一个是Encrypter
3. 分析EncryptionServiceProvider
文件
public function register()
{
$this->app->singleton('encrypter', function ($app) {
$config = $app->make('config')->get('app'); //从config/app.php里拿到配置文件
if (Str::startsWith($key = $config['key'], 'base64:')) { //分析配置文件里的key里面有没有带'base64'
$key = base64_decode(substr($key, 7)); //如果有的话,把key前面的base64:给取消,并且解析出原来的字符串
}
return new Encrypter($key, $config['cipher']); //实例化Encrypte类,注入到框架里
});
}
这个文件没太多东西,但是通过这个我们可以看出,其实在配置文件的,我们能直接写key,并且前面不带base64也是可以解析。相当于省几步操作
另外,在实例化类的时候,需要传入key以及加密方式
4. 分析Encrypter
文件
1. 分析__construct
,在实例化之前执行
public