import CryptoJS from 'crypto-js'; // 加密密钥 - 建议从环境变量读取,这里使用固定密钥作为示例 const SECRET_KEY = 'flow-platform-2025-secret-key'; /** * AES 加密 * @param data 需要加密的数据(对象会被序列化为 JSON) * @returns 加密后的字符串 */ export function encrypt(data: any): string { try { const jsonString = typeof data === 'string' ? data : JSON.stringify(data); const encrypted = CryptoJS.AES.encrypt(jsonString, SECRET_KEY).toString(); return encrypted; } catch (error) { console.error('加密失败:', error); throw error; } } /** * AES 解密 * @param encryptedData 加密的字符串 * @returns 解密后的数据(如果是 JSON 对象会自动解析) */ export function decrypt(encryptedData: string): any { try { const bytes = CryptoJS.AES.decrypt(encryptedData, SECRET_KEY); const decryptedString = bytes.toString(CryptoJS.enc.Utf8); if (!decryptedString) { throw new Error('解密失败:无法解析数据'); } // 尝试解析为 JSON,如果失败则返回原始字符串 try { return JSON.parse(decryptedString); } catch { return decryptedString; } } catch (error) { console.error('解密失败:', error); throw error; } } /** * 加密登录参数(用户名和密码) * @param params 包含 username 和 password 的对象 * @returns 加密后的字符串 */ export function encryptLoginParams(params: { username: string; password: string }): string { return encrypt(params); } /** * 解密登录参数 * @param encryptedParams 加密的登录参数字符串 * @returns 解密后的对象,包含 username 和 password */ export function decryptLoginParams(encryptedParams: string): { username: string; password: string } | null { try { return decrypt(encryptedParams); } catch (error) { console.error('解密登录参数失败:', error); return null; } }