ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
加密解密JS在公共文件public下的transcode.js ``` 注意:以下方法在TransCode函数生成必要参数,请在同一块级作用域下执行代码 1. //首先构造函数 new TransCode(); var transcode = new TransCode() 2. //执行transcode.headers(1)生成headers参数。 var headers = transcode.headers(1); //用变量接收,然后加入接口请求的headers中 /* transcode.headers(1) 参数为1时,直接返回对象,加入headers中 返回类似 { tmtimestamp:‘1544517153323’, tmrandomnum:‘jift62zw72naprm4’, tmencryptkey:‘a0199c94546479c1fcaef6f540de0eb8’, } */ /* transcode.headers(2) 参数为2时,返回数组,objkey是属性名,objvalue是属性值,方便特殊情况自行组装加入headers中 返回类似[ {objkey:'tmtimestamp',objvalue:‘1544517153323’}, {objkey:'tmrandomnum',objvalue:‘jift62zw72naprm4’}, {objkey:'tmencryptkey',objvalue:‘a0199c94546479c1fcaef6f540de0eb8’}, ] */ 3.transcode.encrypt(data) //为加密方法,该data参数为接口请求的发送对象(Object),该方法会返回一个加密后的字符串 4.transcode.decrypt(data) //为解密方法,该data参数为请求成功后返回的加密字符串(String),该方法会返回一个解密后的对象 ``` ``` //例如:jq AJAX请求 <script src="/public/static/js/jquery-3.31.min.js"></script> <script src="/public/transcode.js"></script> //请求前,先建立函数,TransCode函数中encrypt()是加密方法,decrypt()是解密方法,参数传入加解密的对象信息就行 var transcode = new TransCode(); //构造加解密函数 var postData={admin:'admin',password:'password'};//发送的信息 var headers = transcode.headers(1);//headers参数 $.ajax({ type: "post", url: "/system/login/userLogin", cache: false, //禁用缓存 sync:false, headers: headers, data:{tm_encrypt_data:transcode.encrypt(postData)}, //加密后的字符串,后台定义字段接收 dataType: "json", success: function (data) { var a = data.data transcode.decrypt(a)//此方法是解密后台传过来的信息,参数为加密后的字符串 },error:function(){ } }) ``` ``` //对于react和vue项目中,请在入口页面index.html引入下方js,方便全局可直接使用 <script src="/public/transcode.js"></script> //类似react中封装总请求requset 方法 export default function request(url, options) { const defaultOptions = { credentials: 'include', }; const newOptions = { ...defaultOptions, ...options }; //请求前,先建立函数,TransCode函数中encrypt()是加密方法,decrypt()是解密方法,参数传入加解密的对象信息就行 let transcode = new TransCode(); let headers = transcode.headers(1);//headers参数 if (newOptions.method === 'POST' || newOptions.method === 'PUT') { newOptions.headers = { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', ...newOptions.headers, ...headers//展开heardes里面的参数 }; newOptions.body = JSON.stringify(tm_encrypt_data:transcode.encrypt(newOptions.body)); //加密发送的信息为字符串,后台定义字段接收 } return fetch(url, newOptions) .then(checkStatus) .then((response) => { if (newOptions.method === 'DELETE' || response.status === 204) { return response.text(); } //接收服务返回的promise进行解密处理 return response.json().then((res)=>{ let newpromise = Promise.resolve(res); if('tmencrypt' in res && res.tmencrypt==1){ //解密后台返回的数据,并重新返回promise res.data= transcode.decrypt(res.data) newpromise = Promise.resolve(res); } return newpromise }) }); } ```