前端请求后端接口进行参数加密处理:

const CryptoJs = require('crypto-js');
const defaultKey = "zoe_nurse_qazxr8"; // 默认的key
const defaultIv = "qwertyuiopasdfgh"; // 默认的key 偏移量/*** 加密方法* @param: str 需要加密的字符* @param: key 密钥* @param: iv 密钥偏移量*/
function encrypt(str, key, iv) {const keyStr = key ? encParse(key) : encParse(defaultKey);const ivStr = iv ? encParse(iv) : encParse(defaultIv);const encryptedStr = CryptoJs.AES.encrypt(str, keyStr, {iv: ivStr,mode: CryptoJs.mode.CBC,padding: CryptoJs.pad.Pkcs7});// 直接toString()是base64格式的字符串// ciphertext.toString() 是128位的字符串return encryptedStr.toString();
}
/*** 解密方法* @param: str 需要解密的字符* @param: key 密钥* @param: iv 密钥偏移量*/
function decrypt(str, key, iv) {const keyStr = key ? encParse(key) : encParse(defaultKey);const ivStr = iv ? encParse(iv) : encParse(defaultIv);// 判断str是否为base64,如果不是就要转base64,是了就不能再转const flag = isBase64(str);if (!flag) {// 转为base64之前要先转16进制str = CryptoJs.enc.Hex.parse(str);// 只有base64格式的字符才能被解密str = CryptoJs.enc.Base64.stringify(str);}const encryptedStr = CryptoJs.AES.decrypt(str, keyStr, {iv: ivStr,mode: CryptoJs.mode.CBC,padding: CryptoJs.pad.Pkcs7});return encryptedStr.toString(CryptoJs.enc.Utf8);
}
/*** 处理密钥字符格式* @param: key 需要转格式的字符*/
function encParse(key) {// key = CryptoJs.enc.Utf8.parse(key);return CryptoJs.enc.Latin1.parse(key);
}
/*** 使用MD5 hash字符串* @param: str 需要加密的字符串* @param: times 需要hash的次数*/
function md5(str, times = 1) {for (let i = 0; i < times; i++) {str = CryptoJs.MD5(str).toString();}return str;
}
/*** 判断是否是Base64格式的字符串*/
function isBase64(str) {let reg = /^(([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=))|(([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==))$/;return reg.test(str);
}export default {decrypt,encrypt,md5
}

在request请求里使用

import api from './api';
import cryptoJs from './aes.js'const APP_CONFING = api.getAppConfig();/*** 登录拦截* @param {String} resolve 成功* @param {String} reject 失败* @param {String} data 返回数据* @return {function} promise*/
function loginRequest(resolve, reject, data) {reject(data || '请先登录');let dataRouter = api.getRouterMin();if (dataRouter.router === '/pages/login/index') {api.removeStorage('Router');api.redirectPage('/pages/login/index')} else {api.setStorage('Router', JSON.stringify(dataRouter));api.redirectPage('/pages/login/index')}
}/*** 发送请求* @param {Object} options* @param {String} options.url 请求地址* @param {String} options.method 请求方式* @param {String} options.data 入参* @param {String} options.loading 请求地址* @param {String} options.loadingText 请求地址* @param {String} options.whiteAuth 是否是白名单* @return {function} promise*/
function beforeRequest(options) {return new Promise((resolve, reject) => {let token = APP_CONFING.TOKEN;let header = APP_CONFING.HEADER;// 判断是否需要登录权限(默认需要登录权限)if (!options.whiteAuth === true && !token) {loginRequest(resolve, reject, '请先登录');return}// 判断是否显示加载框if (options.loading) {wx.showLoading({title: options.loadingText || '加载中'});}if(token){header['token'] = token;}header['requestId'] = new Date().getTime();options.data = {userId: APP_CONFING.USER_INFO.userId,userImCode: APP_CONFING.TOKEN_TIM.IM_ID,patientId: APP_CONFING.TOKEN_TIM.IM_ID && APP_CONFING.TOKEN_TIM.IM_ID.replace(/[^0-9]/ig, ""),...options.data};options.data = APP_CONFING.ENCRY ? cryptoJs.encrypt(JSON.stringify(options.data)) : options.data;options.header = header;afterRequest(options, resolve, reject)})
}/*** 发送请求* @param {Object} options* @param {String} options.url 请求地址* @param {String} options.method 请求方式* @param {String} options.data 入参* @param {String} options.header 请求头部* @param {String} options.loading 请求地址* @param {String} options.loadingText 请求地址* @param {String} options.whiteAuth 是否是白名单* @param {String} resolve 成功* @param {String} reject 失败* @return {function} promise*/
function afterRequest(options, resolve, reject) {wx.request({url: options.url,method: options.method,header: options.header,data: options.data,timeout: 30000,success: (res) => {let data = res.data;// if (APP_CONFING.ENCRY) {//     //解密并去除空格和换行符//     let x = cryptoJs.decrypt(data).replace(/[ ]|[\r\n]/g, "");//     //展现多余的u0000//     x = JSON.stringify(x).replace(/[\\]/g, '');//     //去除u0000//     x = x.replace(new RegExp('u0000', "gm"), '');//     //截取JSON字符串对象//     x = x.substring(1, x.length - 1);//     //转为JSON对象//     data = JSON.parse(x);//     api.log('回参', data)// }let {code,message} = data;// 正常状态码的响应处理if (code === "200") {resolve(data, res);}// 特殊错误状态码的响应处理else if (['401', '402'].indexOf(code) !== -1) {reject(data);}// 信息过期需要重新登录的特殊状态码响应处理else if (['410000', '410001', '410002', '40000'].indexOf(code) !== -1) {loginRequest(resolve, reject, data);} else {reject(message || '服务器错误');}},fail: (err) => {reject(err);api.log("加载失败", err)},complete: (message) => {if (options.loading) {wx.hideLoading();}}})
}const request = {};// 设置请求方式(BASE_URL)
['options', 'get', 'post', 'put', 'head', 'delete'].forEach((method) => {request[method] = (options = {}) => {options.url = `${APP_CONFING.BASE_URL}${options.url}`;return beforeRequest({method, ...options})}
});module.exports = request;

微信小程序使用AES加密和解密相关推荐

  1. 微信小程序——crypto-js参数加密、解密问题

    前言: 在很多项目中涉及到信息敏感问题,为防止http信息传输时参数被劫持进行二次传输的尴尬局面,最好使用前端加密参数请求,后端解密,返回数据时后端加密,前端解密.防止信息被盗取.目前主流的加密方式有 ...

  2. java写微信小程序答辩问题_java微信小程序开发中加密解密算法总结

    详解java微信小程序开发中加密解密算法 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H5.还接入了小程序开发.但是,小程序中竟然没有提供Java版本的加密数据解密算法.这着实让 ...

  3. 微信小程序接口实现加密

    微信小程序接口实现加密教程: 场景 小程序请求的所有接口参数必须加密,后台返回数据也需要加密,并且增加Token验证 一.小程序端功能编写 1.下载一份Js版的aesUtil.js源码.[注:文章末尾 ...

  4. 微信小程序与服务器对称加解密,细说CryptoJs使用(微信小程序加密解密)

    前言 CryptoJs是google推出的一款前段解密类库.功能强大,包含很多的前段解密算法. 一.google下载地址: 二次开发版本 google原版地址 二.常用方法 Testing webso ...

  5. 微信小程序RSA非对称加密。

    因公司做的产品为金融项目,所以对数据安全性有很高要求,因为项目中的数据都会通过3DES 对称加密,和RSA非对称加密进行数据传输. 在这里先简单介绍一下什么是对称加密和非对称加密 对称加密:对称加密采 ...

  6. 某微信小程序连锁超市响应参数解密

    小程序名称: 57qi5peX6L+e6ZSB5ZOB5ZWG5Z+O 抓包 请求 POST /?web046&tims=1654269437000,A8Iis6GGN2lkVJM1WdkuG ...

  7. 京喜拼拼微信小程序-signStr参数加密

    调试api: https://api.m.jd.com/api?functionId=jxpp.category.catePageRpc.cateSkuFetch&appid=jxpp_min ...

  8. 微信小程序:MD5 加密

    微信小程序是基于 js 进行封装的,所以,本质上是 js 的 MD5 加密 一个问题是,我后台服务器用的是 Python,js 和 Python 会有 MD5 密文不一致的情况 具体参考:https: ...

  9. 微信小程序使用MD5加密

    在微信小程序开发中,使用到MD5加密(比如登录加密password). 具体实现方法: 首先在项目中找到utils文件,在该文件下新建一个js文件 md5.js 然后复制下面的代码到你的文件中 /* ...

最新文章

  1. zabbix.php访问不了_zabbix_配置Nginx连接php
  2. Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码
  3. Linux文件命名规则
  4. 全国计算机等级考试题库二级C操作题100套(第61套)
  5. mysql性能调优精简版
  6. LeetCode 1408. 数组中的字符串匹配(暴力查找)
  7. #ifndef_百度百科
  8. 操作系统源码及GeekOS学习
  9. slf4j日志门面担当
  10. spring boot 中用到的thymeleaf (模板引擎)
  11. K3 CLOUD计划管理之计划方案(MPS/MRP)
  12. 【网上商城优惠活动】
  13. 如何重新认知性能优化及其度量方法
  14. java水平翻转矩阵_Java实现 LeetCode 519 随机翻转矩阵
  15. tf.nn.batch_normalization() 和 tf.layer.batch_normalization()
  16. C++转换函数 (conversion function)
  17. 电源硬件设计----反激变换器(Flyback Converter)基础
  18. 初识LTE(五):完整的SISO LTE 物理层实现
  19. 云原生数据库VS传统数据库
  20. 群落生态学的 α-、β-、γ-多样性

热门文章

  1. 没接显示器使用VNC远程黑屏
  2. BIGEMAP通过离线地图二次开发接口(离线地图API)
  3. EasyCode .Net 代码生成器 之QQ群
  4. [office办公软件教程] Photoshop如何绘画烟雾?Photoshop绘画烟雾的方法
  5. 【DFS经典例题】2n皇后问题
  6. Windows窃取U盘数据
  7. 一分钟攻破ADSL 盗遍宽带密码(转)
  8. win7 远程桌面的多用户连接破解
  9. 一文读懂数字治理的要素与灵魂
  10. 计算机专业开题报告论证记录如何写,开题论证记录