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