1.RSA
加密流程:获取到后台传来的公钥,调用小程序登录接口获取到tokenId和userId,通过公钥使用RSA加密参数,再次请求时传给后台
- 创建RSA加密JS文件wx_rsa.js,放到utils文件夹下面
可在网上下载js文件,参考https://github.com/zhangzhaopds/WeixinApp_RSA_Signature/blob/master/utils/wxapp_rsa.js - 引入js文件,创建加密方法RSAEncrypt()
function RSAEncrypt(publicKey, params) {
var RSA = require('./wxapp_rsa')
var publicKey_pkcs1 = `-----BEGIN PUBLIC KEY-----${publicKey}-----END PUBLIC KEY-----`;
// 加密 【加密字段长度不大于117】
var encrypt_rsa = new RSA.RSAKey();
encrypt_rsa = RSA.KEYUTIL.getKey(publicKey_pkcs1);
var encStr = encrypt_rsa.encrypt(params)
encStr = RSA.hex2b64(encStr);
return encStr;
}
export {
RSAEncrypt
}
- 调用该方法加密参数
2.AES
1.创建加解密器Cryptor和方法
//引入CryptoJS库文件
['CryptoMath', 'BlockModes', 'AES', 'MD5', 'HMAC', 'SHA1'].forEach(function (path) {
require('./lib/' + path);
});
//加密工具对象
var Crypto = require('./lib/Crypto').Crypto;
const MODE = new Crypto.mode.CBC(Crypto.pad.pkcs7);
/**
* 加解密器
*/
export default class Cryptor{
constructor(props) {
//apiCode+head拼接字符串md5加密
const strMd5 = Crypto.MD5(props.apiCode + props.head);
const arrMd5 = Crypto.charenc.UTF8.stringToBytes(strMd5);
//前16位作为iv
this.tempIv = arrMd5.slice(0, 16);
//后16位作为key
this.tempKey = arrMd5.slice(16);
}
/**
* 加密
* @param {String} cleartext
*/
encrypt(cleartext) {
if (!cleartext || cleartext == '{}') {
return '';
}
return Crypto.AES.encrypt(cleartext, this.tempKey, {
iv: this.tempIv,
mode: MODE
});
}
/**
* 解密
* @param {String} ciphertext 密文
*/
decrypt(ciphertext) {
return Crypto.AES.decrypt(ciphertext, this.tempKey, {
iv: this.tempIv,
mode: MODE
});
}
}
2.加密
/**
* 装载请求数据体
* @param {Object} params 请求参数对象
* @param {String} apiCode 接口名
* @return {Object} data 请求体数据
* @return {Object} cryptor 加密器
*/
const assembleRequestData = function (params = {}, apiCode = '') {
let head = JSON.stringify({
'AppCode': config.AppCodeEncrypted,
'WaterMark': new Date().getTime()
});
let data = {
head: head
};
let body = JSON.stringify(params);
//创建加密器对象
const cryptor = new CryptorClass({
head,
apiCode
});
data.body = cryptor.encrypt(body);
return {
data,
cryptor
};
};
3.解密
cryptor是加密时创建的加密器
respData = JSON.parse(cryptor.decrypt(response.data));