feat: 接入 UserHome 前端业务代码(含真实 src/依赖,保留 projman 标准 CI)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
(function (global) {
|
||||
/* ---------- 1. 默认 16 字节密钥 ---------- */
|
||||
const DEFAULT_KEY_WA = CryptoJS.MD5("bsch2025"); // WordArray(16 byte)
|
||||
|
||||
class BschCryptoUtil {
|
||||
#aesKey;
|
||||
|
||||
constructor(key) {
|
||||
// 支持外部传入字符串或 WordArray,默认用隐藏后的 MD5
|
||||
this.#aesKey = key != null ? key : DEFAULT_KEY_WA;
|
||||
}
|
||||
|
||||
encrypt(data) {
|
||||
const message = typeof data === "string" ? data : JSON.stringify(data);
|
||||
const encrypted = CryptoJS.AES.encrypt(message, this.#aesKey, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
});
|
||||
return encrypted.toString(); // Base64
|
||||
}
|
||||
|
||||
decrypt(cipherText) {
|
||||
if (!cipherText) throw new Error("cipherText is empty");
|
||||
const decrypted = CryptoJS.AES.decrypt(cipherText, this.#aesKey, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
});
|
||||
const plain = decrypted.toString(CryptoJS.enc.Utf8);
|
||||
if (!plain) throw new Error("decrypt failed");
|
||||
try {
|
||||
return JSON.parse(plain);
|
||||
} catch (_) {
|
||||
return plain;
|
||||
}
|
||||
}
|
||||
|
||||
static encrypt(data, key) {
|
||||
return new BschCryptoUtil(key).encrypt(data);
|
||||
}
|
||||
|
||||
static decrypt(cipherText, key) {
|
||||
return new BschCryptoUtil(key).decrypt(cipherText);
|
||||
}
|
||||
}
|
||||
/* ---------- 6. 暴露到全局 ---------- */
|
||||
global.BschCryptoUtil = BschCryptoUtil;
|
||||
})(typeof window !== "undefined" ? window : this);
|
||||
Reference in New Issue
Block a user