// 按需引入 CryptoJS 需要的组件 const CryptoJS = require("crypto-js/core"); const Latin1 = require("crypto-js/enc-latin1"); const AES = require("crypto-js/aes"); const ZeroPadding = require("crypto-js/pad-zeropadding"); const Utf8 = require("crypto-js/enc-utf8"); const Base64 = require("crypto-js/enc-base64"); /* * 加密 解密 */ const baseCryptoCode = "1234veterans4321"; // 这个私钥每个项目指定一个唯一。更换密钥,请确认16位 const getKeyHex = (cryptoCode) => Latin1.parse(cryptoCode || baseCryptoCode); const getIvHex = () => Latin1.parse(baseCryptoCode); /** * 加密 * @param {String} key * @param {String} cryptoCode * @returns {string} */ export const getEncrypt = (key, cryptoCode) => { let keyHex = getKeyHex(cryptoCode); let ivHex = getIvHex(); try { key = JSON.stringify(key); } catch (e) { console.warn(e); } return AES.encrypt(key, keyHex, { mode: CryptoJS.mode.CBC, padding: ZeroPadding, iv: ivHex, }).toString(); }; /** * 加密后转base64 * @param {String}} key * @param {String} cryptoCode */ export const getEncryptToBase64 = (key, cryptoCode) => { let encryptStr = getEncrypt(key, cryptoCode); let wordArray = Utf8.parse(encryptStr); return Base64.stringify(wordArray); }; /** * 解密 * @param data * @returns {string} */ export const getDecrypt = (data) => { let keyHex = getKeyHex(); let ivHex = getIvHex(); let decrypted = AES.decrypt( { ciphertext: Base64.parse(data), }, keyHex, { mode: CryptoJS.mode.CBC, padding: ZeroPadding, iv: ivHex, } ).toString(Utf8); try { decrypted = JSON.parse(decrypted); } catch (e) { console.warn(e); } return decrypted; }; /** * 对base64数据解密 先解析base64,在做解密 * @param {String} data * @returns {string} */ export const getDecryptByBase64 = (data) => { let parsedWordArray = Base64.parse(data); let decryptStr = parsedWordArray.toString(Utf8); return getDecrypt(decryptStr); };