From 8dcd19412d43f0111715cb1defad11389e764d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=98=E6=B0=91=E5=BA=B7?= Date: Thu, 26 Jun 2025 18:02:06 +0800 Subject: [PATCH] =?UTF-8?q?TODO:=E5=8F=AF=E4=BF=A1=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=BA=93-=E6=8E=A5=E5=8F=A3=E5=93=8D=E5=BA=94=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=A7=A3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/utils/request.ts | 66 ++++++++++++++++++++++++++++++++++++++++++++ yarn.lock | 4 +-- 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 38fb1e8..b217511 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@vueuse/core": "^10.2.1", "axios": "^1.6.8", "canvas-confetti": "^1.9.2", - "crypto-js": "^4.1.1", + "crypto-js": "^4.2.0", "dayjs": "^1.11.13", "devui-theme": "^0.0.7", "dompurify": "^3.0.5", diff --git a/src/utils/request.ts b/src/utils/request.ts index c5ad813..87993a7 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -11,6 +11,67 @@ import { useAccountStore } from '@/stores/user'; const handleError = dealWarning(); +import CryptoJS from 'crypto-js'; // 引入加密库 + +// 加密配置 +const sKey = CryptoJS.enc.Utf8.parse('mXzfCSPBKmEA8aLq'); +const iv = CryptoJS.enc.Utf8.parse('tbeJJLC6dZQXXtWr'); + +/** + * 解密函数 + * @param text 待解密的Base64字符串 + */ +const $Decrypt = (text) => { + debugger + if (!text) return text; + + try { + // 处理Base64编码 + let src = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Base64.parse(text)); + + // AES-CBC-PKCS7解密 + let bytes = CryptoJS.AES.decrypt(src, sKey, { + iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + + let originalText = bytes.toString(CryptoJS.enc.Utf8); + + // 尝试解析为JSON对象 + return JSON.parse(originalText); + } catch (e) { + console.error('解密失败:', e); + return text; // 解密失败返回原始数据 + } +}; + +/** + * 加密函数 + * @param data 待加密的对象或字符串 + */ +const $Encrypt = (data) => { + if (!data) return data; + + try { + // 将数据转换为JSON字符串 + const jsonData = typeof data === 'string' ? data : JSON.stringify(data); + + // AES-CBC-PKCS7加密 + const encrypted = CryptoJS.AES.encrypt(jsonData, sKey, { + iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + + // 转换为Base64字符串 + return encrypted.toString(); + } catch (e) { + console.error('加密失败:', e); + return data; // 加密失败返回原始数据 + } +}; + /** 设置用户中心相关api迁移时的api前缀 */ const setPassportPrefix = (url: string, method: string) => { const prefix = (import.meta as any).env.VITE_PASSPORT_PREFIX; @@ -45,6 +106,10 @@ export const baseDevURL = (import.meta as any).env.VITE_DEV_API_HOST; type CustomConfigs = { // 是否使用自定义的错误处理 customError?: boolean; + // 是否需要加密请求数据 + needEncrypt?: boolean; + // 是否需要解密响应数据 + needDecrypt?: boolean; }; interface PendingTask { @@ -135,6 +200,7 @@ const proxyService = (params: any, customConfigs?: CustomConfigs) => { // response 拦截器 service.interceptors.response.use( (response) => { + // response.data.data = $Decrypt('OTNNwNE3Q6oeb4diUBcOiA==') return response; }, async (error) => { diff --git a/yarn.lock b/yarn.lock index dd3f243..695b827 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2092,9 +2092,9 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -crypto-js@^4.1.1: +crypto-js@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz" + resolved "https://mirrors.cloud.tencent.com/npm/crypto-js/-/crypto-js-4.2.0.tgz" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== cssesc@^3.0.0: