import * as CryptoJS from "crypto-js";
|
|
/**
|
* Base64 编码(按 UTF-8 处理)
|
* 注意:btoa 只在浏览器(H5)存在,App 和小程序里没有,直接调用会报 btoa is not defined。
|
* 这里在非 H5 环境用纯 JS 实现,不依赖任何平台 API。
|
*/
|
const B64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
function base64Encode(str) {
|
const text = String(str);
|
// UTF-8 字节序列
|
const utf8 = unescape(encodeURIComponent(text));
|
let out = "";
|
for (let i = 0; i < utf8.length; i += 3) {
|
const c1 = utf8.charCodeAt(i);
|
const c2 = utf8.charCodeAt(i + 1);
|
const c3 = utf8.charCodeAt(i + 2);
|
out += B64_CHARS[c1 >> 2];
|
out += B64_CHARS[((c1 & 3) << 4) | (isNaN(c2) ? 0 : c2 >> 4)];
|
out += isNaN(c2) ? "=" : B64_CHARS[((c2 & 15) << 2) | (isNaN(c3) ? 0 : c3 >> 6)];
|
out += isNaN(c3) ? "=" : B64_CHARS[c3 & 63];
|
}
|
return out;
|
}
|
|
/**
|
*加密处理
|
*/
|
export const encryption = params => {
|
let { data, type, param, key } = params;
|
const result = JSON.parse(JSON.stringify(data));
|
if (type === "Base64") {
|
param.forEach(ele => {
|
result[ele] = base64Encode(result[ele]);
|
});
|
} else {
|
param.forEach(ele => {
|
var data = result[ele];
|
key = CryptoJS.enc.Latin1.parse(key);
|
var iv = key;
|
// 加密
|
var encrypted = CryptoJS.AES.encrypt(data, key, {
|
iv: iv,
|
mode: CryptoJS.mode.CBC,
|
padding: CryptoJS.pad.ZeroPadding
|
});
|
result[ele] = encrypted.toString();
|
|
});
|
|
}
|
return result;
|
};
|