import CryptoJS from 'crypto-js' // 配置参数 const MODE_CBC = "CBC" const PADDING_MODE = "PKCS7Padding" const DEFAULT_IV = "@ZiyiTechProduct" const AES_DEFAULT_KEY = "ZiyiTechPro#2025" // AES-CBC 加密(输出Hex字符串) export function encryptAESCBC(data) { const key = CryptoJS.enc.Utf8.parse(AES_DEFAULT_KEY) const iv = CryptoJS.enc.Utf8.parse(DEFAULT_IV) // 统一将输入转为字符串 const plaintext = typeof data === 'object' ? JSON.stringify(data) : String(data) // 加密并输出Hex字符串 const encrypted = CryptoJS.AES.encrypt( plaintext, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ).ciphertext.toString(CryptoJS.enc.Hex) // 直接提取二进制密文转为Hex return encrypted } // AES-CBC 解密(处理Hex字符串输入) export function decryptAESCBC(encryptedHex) { const key = CryptoJS.enc.Utf8.parse(AES_DEFAULT_KEY) const iv = CryptoJS.enc.Utf8.parse(DEFAULT_IV) // 将Hex字符串解析为CryptoJS的密文对象 const ciphertext = CryptoJS.enc.Hex.parse(encryptedHex) const encryptedData = { ciphertext: ciphertext } // 解密 const decrypted = CryptoJS.AES.decrypt( encryptedData, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ) // 统一输出为字符串(自动处理JSON或普通字符串) const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8) try { return JSON.parse(decryptedStr) } catch { return decryptedStr } }