项目实战之---AES 加密

ajax/index.js

1import axiosApi from '../js/fetch'; 2import { baseUrl, headerParams } from '../js/baseUrl'; 3// import引用AES源码js 4import CryptoJS from 'crypto-js/crypto-js'; 5console.log(process.env); 6// 密钥 4492d531a3a04939 7// 生成验签的密钥不做任何处理 8let signKey = '4492d531a3a04939'; 9// 参与加解密的验签 10var keyCode = '4492d531a3a04939'; 11switch (process.env.NODE_ENV) { 12case 'development': keyCode = '4492d531a3a04939'; break; 13case 'test': keyCode = '4492d531a3a04939'; break; 14case 'production': keyCode = '/static/dev/'; break; 15default: keyCode = '4492d531a3a04939'; break; 16} 17 18// 随机数 19function getRandom (length) { 20 let randomStr = ''; 21 if (!length) { 22 var length = 5; 23 } 24 for (var i = 0; i <= length; i++) { 25 randomStr += Math.floor(Math.random() * 10); 26 } 27 return randomStr; 28} 29 30// 得到验签 31function getRequestObj () { 32 var newRequestObj = {}; // 参数对象 33 let initArray = []; // 延签数组 34 let nonce = getRandom(); // 随机数 35 let timestamp = new Date().getTime(); 36 initArray.push(nonce, timestamp, signKey); 37 let initStr = initArray.sort().join(''); // 延签 38 console.log(initStr); 39 // eslint-disable-next-line new-cap 40 initStr = CryptoJS.SHA1(initStr).toString().toUpperCase(); 41 // console.log('加密后的验签', initStr); 42 let queryStr = ''; 43 // 拼接参数 44 newRequestObj.timestamp = timestamp; 45 newRequestObj.nonce = nonce; 46 newRequestObj.signature = initStr; 47 for (var key in newRequestObj) { 48 queryStr += key + '=' + newRequestObj[key] + '&'; 49 } 50 queryStr = queryStr.substring(0, queryStr.length - 1); 51 return queryStr; 52} 53// 处理key 54function getKey (lightKey) { 55 // eslint-disable-next-line new-cap 56 var realKey = CryptoJS.SHA1(lightKey); 57 // eslint-disable-next-line new-cap 58 realKey = CryptoJS.SHA1(realKey).toString().substring(0, 32); // 真正的key 59 // console.log('realKey', realKey); 60 return realKey; 61} 62// 加密 63export function encrypt (data, lightKey) { 64 lightKey = lightKey || keyCode; // 这一步异常关键!!!!!! 65 var realKey = getKey(lightKey); 66 var encrypt = CryptoJS.AES.encrypt(data, CryptoJS.enc.Hex.parse(realKey), { 67 mode: CryptoJS.mode.ECB, 68 padding: CryptoJS.pad.Pkcs7 69 }); 70 return encrypt.ciphertext.toString(CryptoJS.enc.Base64); 71} 72// 解密 73export function decrypt (data, lightKey) { 74 lightKey = lightKey || keyCode; // 这一步异常关键!!!!!! 75 var realKey = getKey(lightKey); 76 var decrypt = CryptoJS.AES.decrypt({ 77 ciphertext: CryptoJS.enc.Base64.parse(data) 78 }, CryptoJS.enc.Hex.parse(realKey), { 79 mode: CryptoJS.mode.ECB, 80 padding: CryptoJS.pad.Pkcs7 81 }); 82 return decrypt.toString(CryptoJS.enc.Utf8); 83} 84 // 解析响应 85function ajax (opts) { 86 return new Promise((resolve, reject) => { 87 axiosApi 88 .request(opts) 89 .then(data => { 90 // 对入参解密 91 data = JSON.parse(decrypt(data)); 92 const { code } = data; 93 if (Number(code) === 0) return resolve(data); 94 reject(data); 95 }) 96 .catch(err => { 97 reject(err); 98 }); 99 }); 100} 101 102// 加解密封装ajax; 103export function doAjax (name, params, method) { 104 var test = getRequestObj(); 105 console.log(test, '===>'); 106 const opts = { 107 url: baseUrl + name + '?' + test, 108 method: method, // 请求方式 109 data: encrypt(JSON.stringify(headerParams(name, params))), 110 headers: { 'Content-Type': 'application/json' } 111 }; 112 var data = encrypt(JSON.stringify(headerParams(name, params))); 113 console.log(data, '====>加密'); 114 console.log(JSON.parse(decrypt(data)), '===>解密'); 115 return ajax(opts); 116} 117 118export default { 119 encrypt, 120 decrypt 121}; 122

headerParams封装在baseUrl.js文件中

1export const baseUrl = 'http://10.29.32.19:8088/bmp/payment/'; 2 3export const headerParams = (name, data) => { 4 if (!data) { 5 data = {}; 6 }; 7 let headerParams = { 8 charset: 'utf-8', 9 method: 'com.taiping.cashier.' + name, 10 signature: '', 11 timestamp: new Date().getTime(), 12 transId: '', 13 version: '2.0', 14 requestData: data 15 }; 16 return headerParams; 17};
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

采用SHA256,AES加密

采用SHA256,AES加密//import引用AES源码jsimportCryptoJSfrom"cryptojs/cryptojs";importmd5from'jsmd5';console.log(process.env);varlightKey;if(process.env.NODE_ENV"pr

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang