| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 'use strict';/** * * * @author Mai * @date * @version */const CryptoJS = require('crypto-js');const LzString = require('lz-string');const { decode } = require('js-base64');const _interopDefaultLegacy = function(e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; };const CryptoJS__default = /* #__PURE__*/_interopDefaultLegacy(CryptoJS);const key = CryptoJS__default.default.enc.Utf8.parse('7563850888ABCDEF'); // 十六位十六进制数作为密钥const iv = CryptoJS__default.default.enc.Utf8.parse('ABCDEF7563850888'); // 十六位十六进制数作为密钥偏移量const fs = require('fs');const ybpSpr = '|----|', rationSpr = '|====|';const Decrypt = function(str) {    const encryptedHexStr = CryptoJS__default.default.enc.Hex.parse(str);    const src = CryptoJS__default.default.enc.Base64.stringify(encryptedHexStr);    const decrypt = CryptoJS__default.default.AES.decrypt(src, key, {        iv,        mode: CryptoJS__default.default.mode.CBC,        padding: CryptoJS__default.default.pad.Pkcs7,    });    const decryptedStr = decrypt.toString(CryptoJS__default.default.enc.Utf8);    return decryptedStr.toString();};class ybp {    parseSubject(str) {        if (str.indexOf(rationSpr) >= 0) {            const arr = str.split(rationSpr);            const subject = JSON.parse(LzString.decompressFromBase64(arr[0]));            for (let i = 1; i < arr.length; i++) {                const ration = JSON.parse(LzString.decompressFromBase64(arr[i]));                subject.rations.push(...ration);            }            return subject;        } else {            return JSON.parse(LzString.decompressFromBase64(str));        }    }    decryptBuffer(buffer) {        const arr = buffer.split(ybpSpr);        const result = { header: '', subjects: [] };        arr.forEach((s, i) => {            if (i === 0) {                result.header = JSON.parse(Decrypt(s));            } else {                switch (result.header.version) {                    case '3.0':                        result.subjects.push(this.parseSubject(s));                        break;                    default:                        result.subjects.push(JSON.parse(Decrypt(s)));                        break;                }            }        });        return result;    }    async decrypt(file) {        const str = await fs.readFileSync(file, 'utf-8');        return this.decryptBuffer(str);    }}module.exports = ybp;
 |