laravel配置加解密
基于安全考虑,我们php项目配置文件中密码应该是加密的,laravel中也提供了OpenSSL 的 AES-256-CBC 来进行加密
但是如果我们项目配置的是其他加密方式,且希望以最少的改动实现读取加密配置并解密,如何修改代码呢?
首先我们需要了解laravel(我的laravel是5.5)的配置加载流程。
laravel 配置文件加载由配置类 /Illuminate/Foundation/Bootstrap/LoadConfiguration.php 的bootstrap 方法完成。
public function bootstrap(Application $app)
{
$items = [];
//首先查看是否有配置缓存 如果有生成的配置缓存 会存在文件 /bootstrap/cache/config.php
if (file_exists($cached = $app->getCachedConfigPath())) {
$items = require $cached;
$loadedFromCache = true;
}
$app->instance('config', $config = new Repository($items));
//如果没有缓存则读取/config目录下所有的配置文件
if (! isset($loadedFromCache)) {
$this->loadConfigurationFiles($app, $config);
}
//此处的$config就是读取到和加密配置
$app->detectEnvironment(function () use ($config) {
return $config->get('app.env', 'production');
});
//这个位置一会写入解密处理逻辑
date_default_timezone_set($config->get('app.timezone', 'UTC'));
mb_internal_encoding('UTF-8');
}
此时我在.env配置加密的密码

bootstrap()方法读取到的$config mysql 密码是加密的。

引入文件目录:
app/Common/Phpaes.php
composer.json 填写 文件夹位置
"classmap": [
"database/seeds",
"database/factories",
"app/Common"
]
添加完后执行composer命令
composer dumpautoload
在下图位置加入你自己的解密逻辑。(PHP7.2+ 的mcrypt扩展需要自己手动安装哦 )。

或者将array_walk_recursive 封装在Phpaes decryptOptions 方法中 laravel7 中上述方法可能不可用。
try {
\Phpaes::decryptOptions($config);
} catch (\Throwable $th) {
throw new Exception('Phpaes decryptOptions error'.$th->getMessage());
}
这时我们再打印配置看看。

ok解密成功。页面也能正常访问。
在laravel 引入自己的类有疑问,可参考 laravel 引入第三方库
加密类我就不贴出来了。有需要的评论留言。
文字均为博主原创,转载请联系博主,谢谢!

浙公网安备 33010602011771号