aware / doctrine-aes-bundle
使用 AES 加密 doctrine 实体中的字段
2.1.1
2024-09-11 12:54 UTC
Requires
- php: >=8.0.0
- ext-openssl: *
- ext-simplexml: *
- symfony/dom-crawler: *
README
PHP: >=8 Doctrine: >= 2.9
警告: Doctrine 必须 配置为使用 PHP 8 属性! (不是 注解)
安装
composer require aware/doctrine-aes-bundle
配置
aware_doctrine_aes.yaml
aware_doctrine_aes:
key_directory_path: '%kernel.project_dir%'
encryptor_class: AES256
encryptor_class 选项
- AES128
- AES192
- AES256
用法
数据库
实体
使用 #[Encrypted]
属性在一个实体中加密字段。
使用导入: use Aware\DoctrineAESBundle\Configuration\Encrypted;
命令
加密所有标记的字段
doctrine:encrypt:database
解密所有标记的字段
doctrine:decrypt:database
检查加密状态
doctrine:encrypt:status
程序化
加密服务
可以使用服务来完成加密: use Aware\DoctrineAESBundle\Service\EncryptionService;
示例
$enc = $encryptionService->encrypt(text: 'test');
$dec = $encryptionService->decrypt(text: $enc);
加密搜索服务(慢!)
您可以使用服务在加密字段上进行搜索(类似 MYSQL FIND): use Aware\DoctrineAESBundle\Service\EncryptedSearchService;
这是因为需要临时解密所有搜索字段(在单独的 xml 文件中),行数越多,搜索时间越长。返回一个 ORM 查询实例。
示例
$query = $encryptedSearchService->search(User::class, ['username', 'lastIp'], ['robbe', '1']);
$result = $query->getResult();
额外选项
$entity (字符串) | 实体名称 |
$fields (数组) | 要查询的字段名称数组 |
$searchValues (数组) | 字段搜索字符串数组,顺序相同 |
$onlyIds (布尔值) | 不返回查询,但返回与查询匹配的 id 数组 |
$orMode (布尔值) | 不是每个字段都必须匹配 |
$concatMode (布尔值) | 将所有字段和搜索字符串按数组顺序相加。对于诸如姓名 + 姓氏等事物很有用 |