vue3-封装AES(CryptoJS)前端加密解密通信

项目场景:

防止数据被爬取,前后端传参接收参数需要加密处理,使用AES加密。主要使用CryptoJS库中的函数方法,加密:CryptoJS.AES.encrypt(), 解密:CryptoJS.AES.decrypt()。


代码实现

  1. 安装CryptoJS库:
npm install crypto-js
  1. 创建文件夹,@/utils/secret,引入CryptoJS库并封装加密解密函数方法:
import CryptoJS from 'crypto-js/crypto-js';
const key = CryptoJS.enc.Utf8.parse('123321'); // 密钥 后端提供
const iv = CryptoJS.enc.Utf8.parse(''); // 偏移量
/**
 * AES加密 :字符串 key iv  返回base64
 */
export function Encrypt(word) {
   
   
  const srcs = CryptoJS.enc.Utf8.parse(word);
  const encrypted = CryptoJS.AES.encrypt(srcs, key, {
   
   
    iv: iv,
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });
  return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}

/**
 * AES 解密 :字符串 key iv  返回base64
 *  */
export function Decrypt(word) {
   
   
  const base64 = CryptoJS.enc.Base64.parse(word);
  const src = CryptoJS.enc
### 关于 RuoYi-Vue-Plus 中实现 API 接密解密 在开发安全的应用程序时,API 的加解密至关重要。对于 `RuoYi-Vue-Plus` 这样的前后端分离框架而言,在传输敏感数据前对其进行加密处理可以有效防止中间人攻击和其他潜在威胁。 #### 使用 AES 对称加密算法进行接口参数加密 AES 是一种常见的对称加密标准,适合用于保护 RESTful API 请求中的重要信息[^1]。下面是一个简单的例子展示如何利用 Java 和 JavaScript 来完成这一过程: ##### 后端 (Java) 定义一个工具类来执行 AES 加/解密操作: ```java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AesUtil { private static final String ALGORITHM = "AES"; private static final byte[] KEY_VALUE = "your-secret-key".getBytes(); public static String encrypt(String data) throws Exception { Cipher cipher = Cipher.getInstance(ALGORITHM); SecretKeySpec keySpec = new SecretKeySpec(KEY_VALUE, ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] encryptedData = cipher.doFinal(data.getBytes()); return Base64.getEncoder().encodeToString(encryptedData); // 将字节数组转换成Base64字符串形式返回给前端 } public static String decrypt(String encryptedData) throws Exception{ Cipher cipher = Cipher.getInstance(ALGORITHM); SecretKeySpec keySpec = new SecretKeySpec(KEY_VALUE, ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, keySpec); byte[] originalData = cipher.doFinal(Base64.getDecoder().decode(encryptedData)); return new String(originalData); } } ``` 当接收到客户端发送过来已加密的数据包时,可以通过调用上述 `decrypt()` 函数来进行解码并获取原始请求体内容;反之亦然,在响应之前先通过 `encrypt()` 把结果封装起来再传回给浏览器端。 ##### 前端 (Vue.js / JavaScript) 为了配合后端服务端的操作,同样需要编写相应的脚本以支持本地的加解密逻辑。这里推荐使用开源库如 CryptoJS 或者 SubtleCrypto Web API 完成这项工作。 安装依赖项(如果采用 npm 方式管理项目的话): ```bash npm install crypto-js --save ``` 创建一个新的 Vue 组件或者全局混入文件用来保存公用函数: ```javascript // aesUtils.js import * as CryptoJS from 'crypto-js'; const SECRET_KEY = 'your-secret-key'; // 与服务器保持一致的秘密钥值 export function encryptByAES(text){ let keyHex = CryptoJS.enc.Utf8.parse(SECRET_KEY); let srcs = CryptoJS.enc.Utf8.parse(text); return CryptoJS.AES.encrypt(srcs.toString(), keyHex,{ mode:CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(); } export function decryptByAES(ciphertext){ let keyHex = CryptoJS.enc.Utf8.parse(SECRET_KEY); var decrypted = CryptoJS.AES.decrypt({ ciphertext: CryptoJS.lib.WordArray.create( CryptoJS.enc.Base64.parse(ciphertext)) },keyHex,{ mode:CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8); } ``` 现在可以在任何地方导入这些辅助方法,并将其应用于实际场景当中了。例如发起 HTTP POST 请求时可像这样写: ```javascript axios.post('/api/example', {data: encryptByAES(JSON.stringify(params))}) .then(response => console.log(decryptByAES(response.data))) .catch(error => alert('Error occurred')); ``` 以上就是基于 `RuoYi-Vue-Plus` 构建的安全通信机制的一个基本介绍。当然这只是一个起点,具体实施过程中还需要考虑更多细节问题比如异常情况下的错误提示、超时重试策略等等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值