| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- '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 = '|====|', billsSpr = '|++++|', qtyCalcSpr = '|~~~~|';
- 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) {
- let billsParts = [];
- if (str.indexOf(billsSpr) >= 0) {
- const parts = str.split(billsSpr);
- str = parts[0];
- billsParts = parts.slice(1);
- }
- let qtyCalcParts = [];
- if (str.indexOf(qtyCalcSpr) >= 0) {
- const parts = str.split(qtyCalcSpr);
- str = parts[0];
- qtyCalcParts = parts.slice(1);
- }
- let result;
- 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);
- }
- result = subject;
- } else {
- result = JSON.parse(LzString.decompressFromBase64(str));
- }
- if (billsParts.length > 0) {
- if (!result.bills) result.bills = [];
- for (const part of billsParts) {
- const bills = JSON.parse(LzString.decompressFromBase64(part));
- result.bills.push(...bills);
- }
- }
- // todo 暂不考虑算量数据
- return result;
- }
- 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;
|