1.uniapp参数加密(传输给后端参数加密) 1.使用npm install crypto 下载加密所需文件 2.在项目根目录下创建一个utils文件夹,创建一个encryption.js文件写入如下代码块

    1. let CryptoJS = require('crypto-js');
    2. // Crypto加密方法封装
    3. const aesUtil = {
    4. // 加密函數
    5. encrypt: (word, keyStr) => {
    6. if (word instanceof Object) {
    7. //JSON.stringify
    8. word = JSON.stringify(word)
    9. }
    10. var key = CryptoJS.enc.Utf8.parse(keyStr)
    11. var encryptedObj = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(word), key, {
    12. mode: CryptoJS.mode.ECB,
    13. padding: CryptoJS.pad.Pkcs7,
    14. }, )
    15. return encryptedObj.toString()
    16. },
    17. // 解密函數
    18. decrypt: (word, keyStr) => {
    19. let key = CryptoJS.enc.Utf8.parse(keyStr)
    20. let decrypt = CryptoJS.AES.decrypt(word, key, {
    21. mode: CryptoJS.mode.ECB,
    22. padding: CryptoJS.pad.ZeroPadding,
    23. }, )
    24. let decString = CryptoJS.enc.Utf8.stringify(decrypt).toString();
    25. return decString
    26. }
    27. };
    28. module.exports={
    29. aesUtil
    30. }
    1. 3.使用加密参数功能函数

    1.在需要使用加密的页面引入encryption.js文件 import Encry from ‘@/utils/encryption.js’ 2.在使用的页面引入与后端约定的key(非常重要,可以挂载全局变量),example: const key=”cd10239350d94d639cba546a876c0daa”

    1. // 初始化自定义参数
    2. const key="cd10239350d94d639cba546a876c0daa"; // 前端与后端约定的共同协议密匙key
    3. const postData={
    4. name:'小邱',
    5. age:21,
    6. height:175
    7. };
    8. console.log(Encry.aesUtil.encrypt(postData,key),'参数加密查看')
    9. console.log(Encry.aesUtil.decrypt(postData,key),'参数解密查看')
    10. uni.request({
    11. url:'fdfsdf',
    12. data: Encry.aesUtil.encrypt(postData, key), // 请求参数加密
    13. methods:'GET',
    14. header:{
    15. // 配置请求头信息
    16. },
    17. success(res){
    18. console.log(res)
    19. }
    20. })

    2.解密后端返回参数 1.在utils文件夹内创建一个WXBizDataCrypt.js文件,写入以下代码

    1. var crypto = require('crypto')
    2. function WXBizDataCrypt(appId, sessionKey) {
    3. this.appId = appId
    4. this.sessionKey = sessionKey
    5. }
    6. WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
    7. // base64 decode
    8. var sessionKey = new Buffer(this.sessionKey, 'base64')
    9. encryptedData = new Buffer(encryptedData, 'base64')
    10. iv = new Buffer(iv, 'base64')
    11. try {
    12. // 解密
    13. var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
    14. // 设置自动 padding 为 true,删除填充补位
    15. decipher.setAutoPadding(true)
    16. var decoded = decipher.update(encryptedData, 'binary', 'utf8')
    17. decoded += decipher.final('utf8')
    18. decoded = JSON.parse(decoded)
    19. } catch (err) {
    20. throw new Error('Illegal Buffer')
    21. }
    22. if (decoded.watermark.appid !== this.appId) {
    23. throw new Error('Illegal Buffer')
    24. }
    25. return decoded
    26. }
    27. module.exports = WXBizDataCrypt
    1. 2.使用解密功能函数

    1.在需要使用的页面引入该文件 import WXBizDataCrypt from ‘@/utils/WXBizDataCrypt.js’ 2.例如手机号授权的时候

    1. // 1.首先通过uni.login获取到sessionKey并用变量保存
    2. // 2.通过手机号授权获取到encryptedData和iv
    3. // 3.接下来解密数据获取手机号
    4. const data={
    5. iv:iv,
    6. encryptedData:encryptedData,
    7. sessionKey:sessionKey
    8. },
    9. // 使用解密获取数据 openId为小程序的openId,sessionKey是通过uni.login获取到的sessionkey;
    10. let pc=new WXBizDataCrypt(openId,sesssionKey);
    11. // 获取data的两个参数都是通过手机授权获取到的参数
    12. const data=pc.decryptData(encryptedData,iv);
    13. console.log(data.phoneNumber,'获取到的手机号码')

    3.前端使用md5加密 1.首先下载md5加密 打开dos命令窗口 npm install js-md5 -D 2.在main.js文件里引入并挂载全局 import Md5 from ‘js-md5’; // 引入 Vue.prototype.$md5=Md5; 3.在需要使用md5加密的页面直接使用 举个栗子 1.postData是请求参数 时间戳 signKey 预定的一个密钥 let result=$md5(JSON.stringify(postData)+(newDate().valueOf()siginKey) 2.result就是md5加密后的数据

    4.原生HTML使用AES加密

    1. <script src="https://cdn.bootcdn.net/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
    2. <script type="text/javascript">
    3. var aseKey = "12345678" //秘钥必须为:8/16/32位
    4. var message = "13785624612";
    5. //加密
    6. var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), {
    7. mode: CryptoJS.mode.ECB,
    8. padding: CryptoJS.pad.Pkcs7
    9. }).toString();
    10. console.log(encrypt);
    11. //解密
    12. var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), {
    13. mode: CryptoJS.mode.ECB,
    14. padding: CryptoJS.pad.Pkcs7
    15. }).toString(CryptoJS.enc.Utf8);
    16. console.log(decrypt); //13785624612
    17. </script>

    5.原色JS使用MD5加密生成验签sign

    1. <script src="https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.19.0/js/md5.js"></script>
    2. <script>
    3. // data 为原始参数对象 key为MD5验签的Key
    4. let sign=md5(JSON.stringify(data) + (new Date().valueOf()) + 'fdfdffsdfsf'),
    5. </script>