微信小程序接口安全优化(AES加密)

接口优化

优化前:http://a.com/message.php?page=0

优化后:

http://a.com/message.php?page=参数&openid=用户唯一标识&t=时间戳&sign=密文

举个例子:

http://127.0.0.1:808/xiaomi_new/feishu/AES/cs.php?page=11&openid=ou_xxxx

&t=1668575721&sign=eed5d9829f56ee7bf26ec96f2ef1e637

sign的计算方法:

MD5(AES({"page":"11","openid":"ou_xxxx","t":"1668575721"}))

AES加密方法为AES-128-ECB

  • page => 翻页参数
  • openid => 用户唯一标识码
  • t => 时间戳 //参考时钟为RPC(北京建立基准时钟) 精度到秒
  • sign => 密文

后端验签流程

  1. 判断t时间戳是否在30s以内。(防止重放)
  2. 判断openid是否未正确并且用户登录日期是否和当前日期匹配。(防止openid盗用)
  3. 获取到page&openid&t&ip后进行加密,密文和sign进行对比。(防止篡改)

POC:http://a.com/message.php?page=2&openid=ou_xxxx&t=1667986784472&sign=密文

实现代码:

将参数首先进行AES-128-ECB加密,在外层在进行md5加密。

1、建立utils文件夹,存放aes.js、md5.js及aes_util.js工具类。

(1)引入CryptoJS ,将CryptoJS 存入aes.js中。

                CryptoJS 官方地址https://github.com/sytelus/CryptoJS

              直接复制地址:点击链接 CrytoJS文件

(2)引入 md5 加密,点击链接 javascript md5加密               

(3)封装aes加密方法

const CryptoJS = require('./aes'); //引用AES源码js
const utilMd5 = require('./md5');
const key = CryptoJS.enc.Utf8.parse('密钥');
const iv = CryptoJS.enc.Utf8.parse('1234567812345678');
// aes ecb加密方法
function AesEncryptECB(word) {
  let srcs = CryptoJS.enc.Utf8.parse(word);
  let encrypted = CryptoJS.AES.encrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  // md5加密
  return utilMd5.hexMD5(encrypted.toString());
}
module.exports = {
  AesEncryptECB
}

2、使用ase加密接口

// 引入
const CryptoJS = require('../..//utils/aes_util') //获取加密组件
  // 获取创意信息
  getDataList() {
    let that = this;
    let timestamp = Date.parse(new Date()) / 1000;
    const data = {
      page: that.data.page.toString(),
      t: timestamp,
      openid: that.data.openId
    }
    // 调用秘钥方法
    let sign = CryptoJS.AesEncryptECB(JSON.stringify(data))
    wx.request({
      url: 'http://xxxxxxxxxxx',
      data: { ...data, sign },
      method: 'GET',
      header: {
        'content-type': 'application/xml'
      },
      success: function (res) {
        let resData = res.data.data;
        console.log(resData)
      },
      fail: function (err) {
        console.log(err)
      },
    })
  },

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序中进行AES加密,可以使用CryptoJS库来实现。首先,你需要引入CryptoJS库,并在代码中定义AES加密所需的秘钥和偏移量。然后,你可以使用CryptoJS.AES.encrypt方法进行加密,传入待加密的字符串和秘钥、偏移量等参数。最后,将加密后的结果转换为字符串形式并返回。以下是一个示例代码: ```javascript const CryptoJS = require('.../.../utils/aes_util.js'); //引入CryptoJS库 const key = CryptoJS.enc.Utf8.parse("0102030405060708"); //定义秘钥 const iv = CryptoJS.enc.Utf8.parse('0102030405060708'); //定义偏移量 function aesEncrypt(data) { let srcs = CryptoJS.enc.Utf8.parse(data); let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString().toUpperCase(); } //调用示例 let encryptedData = aesEncrypt('123456'); console.log('加密后的数据:', encryptedData); ``` 在上述代码中,我们定义了一个名为aesEncrypt的函数,该函数接受一个参数data,即待加密的字符串。在函数内部,我们将data转换为CryptoJS支持的格式,然后使用CryptoJS.AES.encrypt方法进行加密,并将加密后的结果转换为大写的字符串形式。最后,我们可以通过调用aesEncrypt函数并传入待加密的数据来进行AES加密。 请注意,以上代码仅为示例,实际使用时需要根据你的具体需求进行适当的修改。 #### 引用[.reference_title] - *1* *2* *3* [微信小程序AES加密](https://blog.csdn.net/weixin_45437417/article/details/108263480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值