onamanzi / mdcrypt
管理项目加密
Requires (Dev)
- orchestra/testbench: ^8.13
This package is auto-updated.
Last update: 2024-09-13 01:58:16 UTC
README
要求
- PHP >= 7.4
- Laravel >= 8
安装
通过 composer
composer require onamanzi/mdcrypt
发布配置
php artisan vendor:publish --provider="Onamanzi\Mdcrypt\MdcryptServiceProvider" --tag=mdcrypt-config
配置
一旦发布配置文件,必须在 keys 键中注册项目的初始化向量 (iv) 和密码 (pass)
'keys' => [
'pass' => [
'mi_proyecto' => env('MI_PROYECTO_PASS')
],
'iv' => [
'mi_proyecto' => env('MI_PROYECTO_IV')
]
]
iv 的长度必须是 16 个字符。
默认加密方法是 AES-128-CBC,但可以通过 .env 文件中的 CRYPT_METHOD 环境变量进行修改
CRYPT_METHOD="AES-256-CTR"
使用方法
要加密或解密,需要创建一个新的 Mdcrypt 实例,并传递项目名称。
use Onamanzi\Mdcrypt\Mdcrypt;
$crypt = new Mdcrypt('mi_proyecto');
加密
encrypt 方法将加密接收到的字符串。
$stringToEncrypt = "Soy una cadena de texto";
$crypt->encrypt($stringToEncrypt);
要获取加密后的字符串,必须使用 getResult 方法。
$string = $crypt->getResult(); //"g9CllWBEg7Bw-cTom6GvbHF0DKXSVD3u3zeuCU0jGpI,"
解密
解密操作使用 decrypt 方法进行。
$crypt = new Mdcrypt('mi_proyecto');
$crypt->decrypt("g9CllWBEg7Bw-cTom6GvbHF0DKXSVD3u3zeuCU0jGpI,");
与加密类似,结果将使用 getResult 获取。
$crypt->getResult(); //"Soy una cadena de texto"
数组处理
可以使用 encrypt 方法加密数组,为此只需将 array 转换为 JSON。
$arrayToEncrypt = array(
"mensaje1" => "Soy una cadena de texto",
"mensaje2" => "Soy otra cadena de texto"
);
$crypt->encrypt(json_encode($arrayToEncrypt));
$string = $crypt->getResult();
解密操作与解密中描述的方法相同。要获取作为 array 的结果,getResult 方法接受 "array" 作为参数,因此将返回解密后的字符串作为 array。
$crypt->decrypt($string);
$crypt->getResult("array");
错误处理
在加密或解密过程中可能会出现错误,可以使用 getErrors 方法获取错误。以下是一些可能的错误:
- 错误 003:解码 json 失败
- 错误 004:加密失败
- 错误 005:解密失败
请求验证
Mdcrypt 能够在解密内容之前验证接收到的 request,这通过使用 validateRequest 方法实现。如果接收到的 request 无效,则 validateRequest 将返回 false。
$crypt = new Mdcrypt('mi_proyecto');
$isValid = $crypt->validateRequest($request);
获取验证后的 request。
$string = $crypt->getValidRequest();
getValidRequest 方法将返回准备好的加密字符串,以便像在 解密 中看到的那样进行处理。
还可以验证解密后的内容,如果它是 array,Mdcrypt 使用 Laravel 的 Validator 类,可以通过 Mdcrypt 的 validator 方法访问该函数。
$result = $crypt->getResult('array');
$rules = array(
'mensaje1' => 'required'
);
$isValid = $crypt->validator($result,$rules);
如果接收到的数据有效,则 validator 将返回 true,否则返回 false。
如果 validator 返回 false,则可以使用 getRequestErrors 获取错误,该方法将返回在数据接收验证过程中获得的错误 array。
错误处理
以下展示了在验证 request 时可能出现的错误。
- 错误 000:缺少参数
- 错误 001:参数过多
- 错误 002:请求为空
- 验证错误:取决于应用规则。