'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;