hiimlamxung/eup-encrypt-api

此包的最新版本(1.0.6)没有可用的许可证信息。

1.0.6 2024-01-22 12:44 UTC

This package is auto-updated.

Last update: 2024-09-22 14:13:57 UTC


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 =))

祝您好运,成功完成 =))