123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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
- }
- }
|