1.替代db.factory ,将对应的 factory 指向自定义 FieldEncryptionConnectionFactory, 将对应的mysqlConnection 指向自定义FieldEncryptionMysqlConnection,最终将Builder替换成自定义FieldBuilder
//$rule => 配置保留前置位数和加密
$rule = ['pre_len' => 0, 'encryption_field_len' => 20000];
/** @var \FieldEncryption\Utils\EncryptionUtils $encryption */
$encryption = app(\FieldEncryption\Utils\EncryptionUtils::class);
$value = $encryption->encryptionAes($value, $rule['pre_len'], $rule['encryption_field_len']);
/** @var \FieldEncryption\Utils\DecryptUtils $decrypt */
$decrypt = app(\FieldEncryption\Utils\DecryptUtils::class);
$value = $decrypt->decryptAes($value);
\FieldEncryption\Providers\DatabaseServiceCustomProvider::class,
\FieldEncryption\Providers\FieldEncryptionProvider::class,
注意要放到 Illuminate\Database\DatabaseServiceProvider::class下面的位置,相当于覆盖
[
[
'table' => '', //table 表名称
'column' => '', //加密列
'rule' => '', //加密规则,与下面rules 相对应
]
]
[
//键值对应field中的rule
'default' => [
'pre_len' => 0, //加密字段前置保留位数,适配一些模糊查询
'tail_len' => 0, //加密字段后置保留位数,目前并不管用
'encryption_field_len' => 20000, //加密位数,目前根据前置位数+加密位数来决定加密成什么样子
],
]
php artisan sys:filed-encryption
可以根据自己的需求改写,脚本所在位置
vendor/chuyubo/field_encryption/src/Command/SysCommand.php
原理:生成临时表进行插入加密后的数据然后关联替换
field_NResPuJT+vjlfgspUqNINah5PsJwwJ2yA6shz9WsSSS=_encryption0,0
解析:'field _'为前置加密标识,'_encryption'为后置加密标识, 0,0 前置保留位数0,后置保留位数0