在uniapp中引入加密工具
npm install crypto-js --save
写加密和加密方法
// crypto.js import CryptoJS from 'crypto-js'; import conf from 'const' const key = conf.key // 此处替换为实际的密钥 export function encrypt(data) { //console.log('key', key) // 确保密钥长度为32个字符,以使用AES-256-CBC if (key.length !== 32) { throw new Error('密钥长度必须为32个字符'); } // 生成随机IV,长度为16字节 let iv = CryptoJS.lib.WordArray.random(16); // 加密数据 const encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), CryptoJS.enc.Utf8.parse(key), { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); //解密测试 //console.log('decode', decrypt(CryptoJS.enc.Base64.stringify(encrypted.ciphertext), CryptoJS.enc.Base64.stringify(iv), key)); // 返回加密数据和IV return { encryptedData: CryptoJS.enc.Base64.stringify(encrypted.ciphertext), // 将密文转换为Base64字符串 iv: CryptoJS.enc.Base64.stringify(iv) // 将IV转换为Base64字符串 }; } export function decrypt(encryptedDataBase64, ivBase64, key) { // Base64解码加密数据和IV const encryptedData = CryptoJS.enc.Base64.parse(encryptedDataBase64); const iv = CryptoJS.enc.Base64.parse(ivBase64); // 解密数据 const decrypted = CryptoJS.AES.decrypt({ ciphertext: encryptedData }, CryptoJS.enc.Utf8.parse(key), { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); // 将解密后的数据转换为字符串,然后转换为JSON对象 return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8)); }
在需要的地方就可以加密了,比如:
// 请求拦截部分,如配置,每次请求前都会执行 Vue.prototype.$u.http.interceptor.request = (config) => { //console.log(vm.$u.sys(),'sys') config.header.platform = vm.$u.sys().platform config.header.version = vm.$u.sys().appVersion config.header.versionCode = vm.$u.sys().appVersionCode config.header.Authorization = 'Bearer ' + (uni.getStorageSync('UserToken') || ''); // 可以对某个url进行特别处理,此url参数为this.$u.get(url)中的url值 if (config.url == 'code2token') config.header.noToken = true; // 对需要加密的参数进行加密处理 // 对需要加密的参数进行加密处理 //console.log(config.method) if (config.method === 'POST' || config.method === 'PUT' ) { // 假设只有POST请求需要加密,并且不是免Token的接口 config.data = encrypt(config.data); console.log('加密参数', config.data) } // 最后需要将config进行return return config; // 如果return一个false值,则会取消本次请求 // if(config.url == '/user/rest') return false; // 取消某次请求 },
php后端解密:
// 解密函数 public static function decrypt($data, $key, $iv) { $decrypted = openssl_decrypt(base64_decode($data), "AES-256-CBC", $key, OPENSSL_RAW_DATA, base64_decode($iv)); return $decrypted; }