快应用 本身自带的也有AES加密方法,但是我这边用不了;
我这里npm install crypto-js
下载到了本地;
这里的ace.js就是crypto-js.js,所有我就有重新建立了一个crypto-js.js;
新建立的crypto-js.js代码如下:
//引入ace.js
const CryptoJS = require('./ace.js')
export class objStr {
/**
* 生成密钥
* @param n 生成多少位的密钥(默认8位)
*/
getKey(n) {
var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
if (n == null) {
n = 16;
}
var res = "";
for (var i = 0; i < n; i++) {
var id = Math.ceil(Math.random() * 35);
res += chars[id];
}
return res;
};
//加密方法
encrypt(word) {
const that = this;
let keyStr = that.getKey();
let ivStr = that.getKey();
let key = CryptoJS.enc.Utf8.parse(keyStr);
let iv = CryptoJS.enc.Utf8.parse(ivStr);
let srcs = word;
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
let result = keyStr.toString() + ivStr.toString() + encrypted.toString();
return result;
};
//解密方法
Decrypt(word) {
if (word != undefined) {
//数据的0-16位key
let key = CryptoJS.enc.Utf8.parse(word.slice(0, 16));
//数据的16-32位是iv
let iv = CryptoJS.enc.Utf8.parse(word.slice(16, 32));
let srcs = word.slice(32);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
}
}
使用方法:
在使用的页面import { objStr } from "../../assets/js/crypto-js.js"
;引入
在private: {objStr:null,},定义
然后 onInit() { const that = this; that.objStr = new objStr(); },
是用const that = this; that.objStr.Decrypt(data); that.objStr.encrypt(data)
调用