UNPKG

rsshub

Version:
50 lines (48 loc) 1.76 kB
import crypto from "node:crypto"; import CryptoJS from "crypto-js"; import { KEYUTIL, KJUR, hextob64 } from "jsrsasign"; //#region lib/routes/ainvest/utils.ts const publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCARnxLlrhTK28bEV7s2IROjT73KLSjfqpKIvV8L+Yhe4BrF0Ut4oOH728HZlbSF0C3N0vXZjLAFesoS4v1pYOjVCPXl920Lh2seCv82m0cK78WMGuqZTfA44Nv7JsQMHC3+J6IZm8YD53ft2d8mYBFgKektduucjx8sObe7eRyoQIDAQAB"; const randomString = (length) => { if (length > 32) throw new Error("Max length is 32."); return uuidv4().replaceAll("-", "").slice(0, length); }; const uuidv4 = () => crypto.randomUUID(); /** * @param {string} str * @returns {CryptoJS.lib.WordArray} */ const MD5 = (str) => CryptoJS.MD5(str); const encryptAES = (data, key) => { if (typeof key === "string") key = MD5(key); return CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(data), key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(); }; const decryptAES = (data, key) => { if (typeof key === "string") key = MD5(key); return CryptoJS.AES.decrypt(data, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); }; const encryptRSA = (data) => { let pubKey = `-----BEGIN PUBLIC KEY-----${publicKey}-----END PUBLIC KEY-----`; pubKey = KEYUTIL.getKey(pubKey); return hextob64(KJUR.crypto.Cipher.encrypt(data, pubKey)); }; const getHeaders = (key) => { const fingerPrint = uuidv4(); return { "content-type": "application/json", "ovse-trace": uuidv4(), callertype: "USER", fingerprint: encryptAES(fingerPrint, MD5(key)), onetimeskey: encryptRSA(key), timestamp: encryptAES(Date.now(), key), referer: "https://www.ainvest.com/" }; }; //#endregion export { randomString as i, encryptAES as n, getHeaders as r, decryptAES as t };