importjsencryptfrom ' js encrypt ' varcryptojs=require (' crypto js ); //setPublicKey设置公钥//setPrivateKey设置私钥//公钥加密、私钥解密//私钥设置签名、公钥验证//1024位base64加密设置签名为SHA1//2048位base64xxxxx
'; //H5-前端-rsa私钥varprivateGatewayKeyRSA='ryption 数据加密] * @param {[Object]} config [加密前数据例如:{keyHex:"",data:{}}] * @return {[type]} [加密后数据] */function dataEncryption(config){ let newTokenId = localStorage.getItem('gatewayTokenId') || '1'; let publicParam = {'random':randomWord(true, 24, 24),'tokenId': newTokenId}; let tempToken = parseInt(newTokenId) + 1; localStorage.setItem("gatewayTokenId",tempToken); config.keyHex = publicParam.random; //对随机数进行RSA加密 config.data.sign = verify.encrypt(config.keyHex); if (config.data.input) { //随机数 config.data.input['random'] = publicParam.random; //序列 config.data.input['tokenId'] = publicParam.tokenId; }else{ config.data.input = {}; } // window.atob转码,window.atob解码 //使用私钥生成签名 config.data.checkSign = fxREASign.sign(JSON.stringify(config.data.input),CryptoJS.SHA256, "sha256"); // 2048位签名,生产checkSign的长度必须为344位 // 如果不够344为则需要重新生成数据,重新生成随机数等 if(config.data.checkSign.length < 344){ return dataEncryption(config); }; //进行3DES 加密 let tmp = des3Encrypt(JSON.stringify(config.data.input), config.keyHex); //console.log(config.url+"-request-----"); config.data.input = tmp; return config;}/** * [dataEncryption 数据解密] * @param {[Object]} config [加密前数据例如:{keyHex:"",data:{}}] * @return {[type]} [解密后数据] */function dataDecrypt(response){ //解密 let keyHex = fxREASign.decrypt(response.data.sign);// 第一步取出随机密钥>>> 使用RSA解密 response.data.data = des3Decrypt(response.data.data, keyHex);//对数据进行解密,转换为json字符串 //验证签名 response.data.verified = verify.verify(response.data.data,response.data.data.checkSign, CryptoJS.SHA256); return response;}//添加请求拦截器axios.interceptors.request.use(function(config) { // console.log("加密前参数",config.data); //加密处理 if (config.isEncryption) { config = dataEncryption(config); } // console.log("加密后参数",config.data); return config; },function(error) { //请求错误时做些事 return Promise.reject(error); }); //添加响应拦截器axios.interceptors.response.use(function(response) { //是否是加密数据 if(response.config.isEncryption){ let odata = {'respCode':'','respMsg':'',output:{}}; //解密 if (response.data.data) { //解密+验证明签名 response=dataDecrypt(response) //验签通过后 if(response.verified){ if (response.data.data.output) { response.data.data.output = JSON.parse(response.data.data.output); } odata['respCode'] = response.data.data.respCode; odata['respMsg'] = response.data.data.respMsg; }else{ odata['respCode'] = '999999'; odata['respMsg'] = '签名校验失败'; } } return Promise.resolve({data:odata.output}); }else{ return response; }},function(error) { console.log(error.config); //请求错误时做些事 return Promise.reject(error);});