欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 小程序接口加密

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:499

小程序接口加密

发布时间:2020-10-12  
场景

小程序请求的所有接口参数必须加密,后台返回数据也需要加密,并且增加Token验证

 

一、小程序端功能编写

1.下载一份Js版的aesUtil.js源码。【注:文章末尾会贴出所有的相关类文件】 
2.下载一份Js版的md5.js源码。 
3.在pulic.js中进行加解密操作代码如下,其中秘钥和秘钥偏移量要与后台的一致。

 

var CryptoJS = require('aesUtil.js'); //引用AES源码js var md5 = require('md5.js') var key = CryptoJS.enc.Utf8.parse("76CAA1C88F7F8D1D"); //十六位十六进制数作为秘钥 var iv = CryptoJS.enc.Utf8.parse('91129048100F0494'); //十六位十六进制数作为秘钥偏移量 //解密方法 function Decrypt(word) { var encryptedHexStr = CryptoJS.enc.Hex.parse(word); var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); var decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); return decryptedStr.toString(); } //加密方法 function Encrypt(word) { var srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString().toUpperCase(); } //暴露接口 module.exports.Decrypt = Decrypt; module.exports.Encrypt = Encrypt;  

4.在网络请求帮助类中进行参数的加密和返回数据的解密操作。

 

var aes = require('../utils/public.js') var md5 = require("../utils/md5.js") ... /** * 网络请求 */ function request(method, loading, url, params, success, fail) { var url = BASE_URL + url; //请求参数转为JSON字符串 var jsonStr = JSON.stringify(params); console.log(url + ' params=> ' + jsonStr) //根据特定规则生成Token var token = productionToken(params); //加密请求参数 var aesData = aes.Encrypt(jsonStr) console.log('请求=>明文参数:' + jsonStr) console.log('请求=>加密参数:' + aesData) ... wx.request({ url: url, method: method, header: { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8', 'Token': token }, data: { aesData: aesData }, // data: params, success: function(res) { //判断请求结果是否成功 if (res.statusCode == 200 && res.data != '' && res.data != null) { //解密返回数据 console.log('返回=>加密数据:' + res.data); var result = aes.Decrypt(res.data); console.log('返回=>明文数据:'+result); success(JSON.parse(result)) } else { fail() } }, fail: function(res) { fail() }, }) }  

其中生成Token的规则,【生成Token的规则可根据具体的业务逻辑自己定义,我这里使用的规则是根据请求参数的字母排序取其value并加上当前时间戳再进行MD5加密】

 

/** * 生成Token */ function productionToken(params) { var obj = util.objKeySort(params); var value = ''; for (var item in obj) { value += obj[item]; } //加上当前时间戳 value += util.getTokenDate(new Date()) //去除所有空格 value = value.replace(/\s+/g, "") //进行UTF-8编码 value = encodeURI(value); //进行MD5码加密 value = md5.hex_md5(value) return value; } //util的排序函数 function objKeySort(obj) { //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组 var newkey = Object.keys(obj).sort(); //创建一个新的对象,用于存放排好序的键值对   var newObj = {}; //遍历newkey数组 for (var i = 0; i < newkey.length; i++) { //向新创建的对象中按照排好的顺序依次增加键值对 newObj[newkey[i]] = obj[newkey[i]]; } //返回排好序的新对象 return newObj; }  

 

二、服务端功能编写

由于初学SpringMVC,使用的方式不一定是最优最好的,如有不妥善之处,请各位看官多多指教  思路:

通过过滤器拦截请求参数,通过自定义参数包装器对参数进行解密。  在拦截器获取请求的Token并生成服务器端Token进行验证。  对返回参数通过JSON转换器进行加密处理。

小程序接口加密

思路图  1.重写HttpServletRequestWrapper,在自定义的HttpServletRequestWrapper 中对参数进行处理

 

本文标签

: