1 .前端
1和蚪、安裝 crypto-js
npm install crypto-js
2、封裝加密方式
①新建方法
import CryptoJS from "crypto-js";
module.exports = {
/**
* AES加密
* @param {Object} data 待加密的數(shù)據(jù)
* @param {Object} key 密鑰
*/
encrypt(str, keyStr, ivStr) {
const data = JSON.stringify(str);
const key = CryptoJS.enc.Utf8.parse(keyStr); // 密鑰key 后臺提供 - cbc模式 32位字符
const iv = CryptoJS.enc.Utf8.parse(ivStr); // iv 后臺提供 - cbc模式 16位字符
const encryptedData = CryptoJS.AES.encrypt(data, key, {
iv,
mode: CryptoJS.mode.CBC, // 使用 CBC 模式
padding: CryptoJS.pad.Pkcs7, // 使用 PKCS7 填充
}).toString(); // 執(zhí)行加密操作
return encryptedData;
},
},
②使用 ( uni-app舉例烹棉,其他vue類似 )
/** 1. main.js 引入 **/
import { encrypt } from "./utils/crypto-js.js";
Vue.prototype.$encrypt = encrypt;
/** 2. 在封裝請求地方處理 **/
// POST請求
let request = function(url, data, title = '加載中') {
// 加密
let _data = this.$encrypt( data , '32位KEY ','16位IV');
....
}
至此前端完成加密
2. 后端laravel
1. 創(chuàng)建中間件
php artisan make:middleware EncryptRequestMiddleware
2. 中間件處理解密
/** 中間件地址 app / HTTP / Middleware / EncryptRequestMiddleware **/
public function handle(Request $request, Closure $next)
{
// 獲取當(dāng)前請求的路由信息
$route = $request->route();
$currentRouteName = $route->getName();
// 定義你想要去除的接口路由名稱攒霹,進(jìn)行判斷
$excludedRoutes = [
'wechat.oss', //路由名稱
'wechat.payment.notify',
];
// 如果當(dāng)前路由在去除列表中,直接放行
if (in_array($currentRouteName, $excludedRoutes)) {
return $next($request);
}
// 獲取加密的參數(shù)
$encryptedData = $request->data;
$key = 'JrAg7qMi2wTFJnq5ssjJEo9xtEhPtSxX'; // 一個隨機(jī)的 32 字節(jié)密鑰
$iv = '8Z2wMy7amABbqsRC'; // 一個隨機(jī)的 16 字節(jié)初始向量
$method = 'AES-256-CBC'; // 使用 AES-256-CBC 加密算法
$decryptedData = openssl_decrypt(base64_decode($encryptedData), $method, $key, OPENSSL_RAW_DATA, $iv); // 執(zhí)行解密操作
if ($decryptedData === false) {
return response()->json(['error' => '解密失敗'], 403);
}
// 將解密后的參數(shù)設(shè)置回請求對象
$request->merge(['decrypted_data' => json_decode($decryptedData)]);;
return $next($request);
}
3. 注冊全局中間件
/**在 App\Http\Kernel 類中**/
protected $middlewareGroups = [
...
'api' => [
...
\App\Http\Middleware\EncryptRequestMiddleware::class,
],
];
4. 請求處理
...
public function index(Request $request){
$data = $request->decrypted_data; // $data 就是前端請求數(shù)據(jù)
$id = $data->id;
...
}
至此完成加密解密操作