hiimlamxung / eup-encrypt-api
README
1. 描述
- 使用AES加密来加密数据并返回给API
- 解密来自客户端的加密RSA请求
2. 要求
适用于PHP Laravel框架版本5.6及以上。
3. 安装package
运行: composer require hiimlamxung/eup-encrypt-api
将provider添加到config中
$providers = [
...
Hiimlamxung\EupEncryptApi\EupEncryptApiServiceProvider::class
],
发布配置文件: 运行 php artisan vendor:publish --provider="Hiimlamxung\EupEncryptApi\EupEncryptApiServiceProvider"
4. 使用
4.1. 使用AES加密响应API
首先设置
在使用之前,需要按照以下步骤进行设置
-
使用一个单独的秘密密钥,不要使用Laravel的默认APP_KEY变量:创建一个新的key:运行
php artisan key:generate --show
-
将新创建的key替换到config eup_encrypt_api.php中
<?php return [ 'encrypt_res' => [ 'key' => env('EEA_KEY_FOR_ENCRYPT'), // Thay thế key mới tạo vào đây 'cipher' => 'AES-256-CBC' ],
-
运行
php artisan config:cache
使用
需要加密(字符串格式)的数据返回给response API。
使用EupCrypt Facade: use \Hiimlamxung\EupEncryptApi\App\Facades\EupCrypt;
$users = User::get();
$jsonData = json_encode($users); //Chuyển data sang dạng chuỗi json
$encryptedData = EupCrypt::encrypt($jsonData); //Mã hoá data
return response()->json[
'code' => 200,
'data' => $encryptedData
]
4.2. 使用RSA加密解密来自客户端的请求
首先设置
将privateKey和publicKey存储在不同的文件中。如果您还没有key,运行以下代码来自动创建并获取key内容
\Hiimlamxung\EupEncryptApi\App\RSA::createKey(); // tạo mới và trả về nội dung của publicKey, privateKey
将key文件路径添加到config中
'decrypt_req' => [
/**
* ----------------------------------------------------------------
* Đường dẫn file key tính từ thư mục gốc
* ----------------------------------------------------------------
*/
'path_key' => [
'public_key' => '/env/publicKey.txt',
'private_key' => '/env/privateKey.txt',
]
]
使用
创建一个新的middleware(命名自定),用于应用需要解密的route。这个middleware需要继承自package的 \Hiimlamxung\EupEncryptApi\App\Http\Middleware\CanDecryptRSA
运行 php artisan make:middleware CanDecryptRSA
新创建的middleware如下
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Hiimlamxung\EupEncryptApi\App\Http\Middleware\CanDecryptRSA as EupCanDecryptRSA;
class CanDecryptRSA extends EupCanDecryptRSA
{
/**
* Xoá đi method handle, hoặc comment lại, không dùng nữa (Bắt buộc).
*/
// public function handle(Request $request, Closure $next): Response
// }
public function failedResponse(Request $request, Closure $next)
{
// Logic xử lý của bạn khi không thể decrypt được data ở đây.
return response()->json[
'code' => 422,
'message' => 'Could not decrypt the data'
]
}
}
该middleware将检查并解密来自客户端的具有name为'encrypted_data'的param的request。如果需要使用其他param name,可以在config中重新定义
'decrypt_req' => [
/**
* ----------------------------------------------------------------
* Tên trường dữ liệu đã được mã hoá do client gửi lên
* ----------------------------------------------------------------
*/
'encrypted_data_name' => 'encrypted_data',
完成!剩下的工作是注册middleware到Kernel.php并应用到要使用的route上
protected $middlewareAliases = [
...
'can.decrypt.rsa' => \App\Http\Middleware\CanDecryptRSA::class
];
在route中使用
Route::post('/update', 'UserController@update')->middleware('can.decrypt.rsa');
/**
* Có thể tự định nghĩa param name riêng biệt muốn check,
* thay vì lấy theo trong config là 'encrypted_data'.
* Ở đây ta lấy theo param name là encryt_param
*/
Route::post('/store', 'UserController@store')->middleware('can.decrypt.rsa:encryt_param');
DONE. 如果发现bug,请立即联系 lamhv@eupgroup.net =))
祝您好运,成功完成 =))