小程序中对http请求进行加密处理

1. 前言

我们使用http协议传输数据很容易被抓包,项目中做了活动模块,里面有很多敏感信息,所以需要对传输的数据进行加密。使用方法是大家常用的,用md5 和AES 加密方式,小程序端和后端约定好加解密的秘钥,小程序端在传输数据前先对请求参数进行md5加密,然后再进行AES加密得到的数据放入请求头部信息中,后端得到数据后进行解密,最后解密信息经过比对成功后才返回请求数据,否则返回数据有误提示。虽然还是明文传输数据,但是对请求建立了一层保护墙。

2.小程序使用mpVue

小程序使用的是mpvue框架,一个类Vue的东西,这个给我们提供了很多有效并实用的包。

3.mpvue的md5与aes加密插件

crypto-js:“crypto-js”: “^3.1.9-1”

js-md5 : “js-md5”: “^0.7.3”

在小程序的package.json中安装这两个插件, 选择使用aes加密的方法: aesFn.js

import CryptoJS from crypto-js
export default {
  // 加密
  encrypt (word, keyStr) {
    let key = CryptoJS.enc.Utf8.parse(keyStr)
    let srcs = CryptoJS.enc.Utf8.parse(word)
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    })
    return encrypted.toString()
  }
}
import md5 from js-md5
import CryptoJS from ./aesFn		// 引用上面封装的aes方法

let key = ********** // 约定的加解密秘钥
const body = request.body
let secBody = md5(JSON.stringfy(body))
// 一般在aes加密的时候需要将当前时间一起拼接上去,如果后端解密出来的数据和小程序端加密时的当前时间相比相差较大,那说明这个数据有问题,
// let now = new Date()
// request.headers[secretData] = CryptoJS.encrypt(now_secBody, key)
request.headers[secretData] = CryptoJS.encrypt(secBody, key)
经验分享 程序员 微信小程序 职场和发展