需求:
前端请求到后端返回的数据,涉及到一些敏感的数据,需要进行加密处理,前端进行解密。
思路:
- 后端加密,前端解密;后端生成加密的key值,告诉前端,前端解密的时候也需要使用该key值去解密。
- 小程序无法引入cdn插件crypto.js,复制该插件的源代码:
https://blog-static.cnblogs.com/files/gygg/crypto-js.js
,将源码粘贴在utils下新建crypto-js.js文件下 - 在utils下新建crypto.js文件,封装公共的解密函数并导出。
- 在具体的页面中,引入crypto.js,请求返回的数据直接调用解密函数。
代码:
// utils/crypto-js.js
// 打开链接https://blog-static.cnblogs.com/files/gygg/crypto-js.js,将链接里的源码复制到这里
// utils/crypto.js
var CryptoJS = require('/crypto-js.js')
// AES解密方法
function decryptByAES(ciphertext) {
var key = '12345ABCDErwerw2'
var keyHex = CryptoJS.enc.Utf8.parse(key);
var result = CryptoJS.AES.decrypt(ciphertext, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var result_value = result.toString(CryptoJS.enc.Utf8);
return result_value;
}
module.exports = {
decryptByAES
}
// boxList.js
var app = getApp()
var util = require('../../../utils/util.js')
// 引入
var crypto = require('../../../utils/crypto.js')
Page({
data: {
list: []
},
getList: function (query) {
util.operBackground('加载中', `http://api.zhire.cc/jupiter/i/box/list?query_type=1&query_date=2021-02-01`, 'GET', query, res => {
wx.hideLoading()
if(!res.data.data){
this.setData({
list: []
})
}else{
console.log('list2222', res.data.data.list)
var data = res.data.data.list
data.forEach(item => {
// 将加密项 解密
item.income = crypto.decryptByAES(item.income)
})
console.log('list3333', data)
this.setData({
list: data
})
}
})
},
onLoad: function () {
this.getList()
}
})
参考文章:
微信小程序crypto-js AES 加解密数据
crypto-js源码
AES加密算法的详细介绍与实现
微信小程序crypto-js AES 加解密数据