onamanzi/mdcrypt

管理项目加密

1.0.0 2023-12-12 23:52 UTC

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 方法获取错误。以下是一些可能的错误:

  1. 错误 003:解码 json 失败
  2. 错误 004:加密失败
  3. 错误 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 时可能出现的错误。

  1. 错误 000:缺少参数
  2. 错误 001:参数过多
  3. 错误 002:请求为空
  4. 验证错误:取决于应用规则。