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:请求为空
- 验证错误:取决于应用规则。