加密解密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
})
});
}
```