yuan
2026-10-10 ce259180a1a76db6a7e89d651dc3eb1f49932202
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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;
};