前端加密:
npm install crypto-js
// 导入crypto-js库
const CryptoJS = require("crypto-js");
// 定义密钥和初始化向量(IV),它们应该在前后端保持一致
const key = CryptoJS.enc.Utf8.parse('16位字符串');
const iv = CryptoJS.enc.Utf8.parse('16位字符串');
/**
* 对数据进行AES加密,并Base64编码
* @param {string} data - 需要加密的数据
* @returns {string} - 加密并Base64编码后的数据
*/
export function encryptData(data) {
const encrypted = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
使用 import {encryptData} from "@/utils/encryptData";
encryptData()
后台解密:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
* 解密Base64编码的加密数据
* @param encryptedData 加密并Base64编码后的数据
* @return 解密后的原始数据
* @throws Exception 如果解密过程中发生错误
*/
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
private static final String SECRET_KEY = "16位字符串";
private static final String INIT_VECTOR = "16位字符串";
public static String decryptData(String encryptedData) throws Exception {
// 将Base64编码的字符串转换为字节数组
byte[] encryptedBytes = Base64.decodeBase64(encryptedData);
// 创建密钥和初始化向量
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
IvParameterSpec ivSpec = new IvParameterSpec(INIT_VECTOR.getBytes());
// 初始化Cipher对象
Cipher cipher = Cipher.getInstance(TRANSFORMATION, "BC");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
// 执行解密操作
byte[] decrypted = cipher.doFinal(encryptedBytes);
// 返回解密后的字符串
return new String(decrypted);
}
static {
Security.addProvider(new BouncyCastleProvider()); // 注册 BouncyCastle 提供程序
}