小程序CryptoJs加解密-采用AES对称加密
CryptoJS是一个JavaScript加密算法库,用于实现各种加密算法和哈希函数。
1.对称加密:如AES和DES。使用相同的密钥进行加密和解密操作
2.非对称加密:如RSA。非对称加密使用一对密钥,包括公钥和私钥。公钥用于加密数据,私钥用于解密数据
3.哈希函数:包括MD5、SHA-1、SHA-256等。
4.加密模式:如ECB、CBC和CTR。这些模式定义了数据块如何被加密和连接在一起。
CryptoJS易于使用,可以在浏览器环境和Node.js环境中使用。
提示:使用前,需要跟后端沟通好,秘钥和秘钥偏移量。前后端需保持一致
一、安装CryptoJs
npm install crypto-js
安装完成之后:需要构建npm,在工具->构建 npm。构建完成之后就可以引入了
二、引入crypto-js
aesCryptoJS.js中引入 可以
const CryptoJS = require("crypto-js");
也可以
import CryptoJS from "crypto-js";
三、设置密钥和密钥偏移量
aesCryptoJS.js中设置秘钥和偏移量。需与后端保持一致,否则会解密错误
const d = "7uYhf14";
const e = "h094";
const f = "&feki";
const g = "8AYhf";
const h = "14h094E";
const i = "S4jk";
// 十六位十六进制数作为秘钥
const key = CryptoJS.enc.Utf8.parse(d + e + f);
// 十六位十六进制数作为秘钥偏移量
const iv = CryptoJS.enc.Utf8.parse(g + h + i);
四、封装加解密方法
aesCryptoJS.js中写入
// aes加密方法
const newAesEncrypt = (data) => {
let srcs = CryptoJS.enc.Utf8.parse(data);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
iv,
});
return encrypted.toString();
};
// aes解密方法
const newAesDecrypt = (data) => {
let decrypt = CryptoJS.AES.decrypt(data, key, {
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
iv,
});
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr;
};
五、基本简单使用方法
import { newAesEncrypt, newAesDecrypt } from "@/utils/aesCryptoJS";
const data = "1324234234525"
const encryptText = newAesEncrypt(data);
console.log("加密", encryptText);
const decryptText = newAesDecrypt (encryptText);
console.log("解密", decryptText);
六、对业务接口进行加接密
1、简单封装一下request.js
import { EnvConfig } from '../config/index';
export const request = (options) => {
return new Promise((resolve, reject) => {
wx.request({
url: `${EnvConfig.config.host}${options.url}`,
method: options.method,
header: {
'Content-Type': options.type === 1 ? 'application/json' : 'application/x-www-form-urlencoded',
},
timeout: 10000,
// 这里参数,将加密后的参数,传给后端
data: {
...(options.data || {}),
},
async success(res) {
// 这里将后端返回的加密数据,解密后再抛出
resolve(res.data);
},
fail: (err) => {
reject(err);
},
});
});
}
2、看自己业务需要针对哪些接口要加密,什么请求方式才加密
- 只针对生产环境加密;那么在进行参数加密时,需要判断env == ‘release’,是则加密,否不加密
- 只针对post请求加密;那么就判断请求方式method == ‘post’,是则加密,否不加密
- 或者说:只针对生产的post请求加密,判断env == ‘release’ && method == ‘post’
- 在接受后端返回数据时,如果没加密,那也就不需要解密了
3、代码截图
七、微信小程序提供了加解密模块
如果你不想使用crypto-js第三方,微信小程序提供自己的用户加密模块UserCryptoManager
详情请查看:
用户加密模块
小程序加密网络通道