Skip to content

Commit 103f49f

Browse files
committed
Minor Update for Flexible Transfer
A large scale change is WIP
1 parent fcf7315 commit 103f49f

2 files changed

Lines changed: 58 additions & 3 deletions

File tree

src/javascript/CoreHandler.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,12 @@ export class AdvancedEncConfig {
102102
}
103103
}
104104

105-
//魔数,用于自动识别高级加密数据,理论上需要附加正常加密/解密时绝不可能在开头出现的Base64编码范围内字符
105+
//标头,用于自动识别高级加密数据,理论上需要附加正常加密/解密时绝不可能在开头出现的Base64编码范围内字符
106106
const ADVANCED_ENC_MAGIC = "+=";
107+
//标头,用于自动识别灵活传输数据
108+
const FLEXIBLE_TRANSFER_MAGIC = "=/";
107109

110+
// =/+= +=/=
108111
export class CallbackObj {
109112
/**
110113
* 魔曰 Debug 回调位点对象
@@ -144,10 +147,15 @@ export function Enc(
144147
) {
145148
//初始化
146149
//input.output Uint8Array
147-
let WenyanSimulatorObj = new WenyanSimulator(key, callback);
148-
149150
let OriginalData = new Uint8Array();
150151
OriginalData = input.output;
152+
153+
//如果灵活传输已经激活,则进入递归程序
154+
//if ((AdvancedEncObj.FlexibleTransfer.Enable = true)) {
155+
//}
156+
157+
let WenyanSimulatorObj = new WenyanSimulator(key, callback);
158+
151159
let TempS;
152160
TempS = Uint8ArrayTostring(OriginalData);
153161

src/javascript/Misc.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,53 @@ export class ValueNoise1D {
449449
}
450450
}
451451

452+
/**
453+
* 工具函数
454+
* 在长字符串的随机位置插入一个或两个子串,保证不破坏子串完整性
455+
*
456+
* @param {string} originalStr 原始长字符串
457+
* @param {string} sub1 必须提供的第一个子串
458+
* @param {string} [sub2] 可选的第二个子串
459+
* @returns {string} 拼接后的新字符串
460+
*/
461+
export function insertSubstrings(originalStr, sub1, sub2 = undefined) {
462+
const L = originalStr.length;
463+
464+
// 如果 sub2 未传入、为 undefined 或为空字符串,则走单子串逻辑
465+
if (!sub2) {
466+
const i = Math.floor(GetRandomIndex(L));
467+
return originalStr.slice(0, i) + sub1 + originalStr.slice(i);
468+
}
469+
470+
//随机选取 sub1 的插入位置 i1 (范围: 0 到 L)
471+
const i1 = Math.floor(GetRandomIndex(L));
472+
473+
//随机选取 sub2 的虚拟插入位置 r (范围: 0 到 L + 1)
474+
const r = Math.floor(GetRandomIndex(L + 1));
475+
476+
//计算切片并执行单次字符串拼接
477+
if (r <= i1) {
478+
// sub2 插入在 sub1 的前面
479+
return (
480+
originalStr.slice(0, r) +
481+
sub2 +
482+
originalStr.slice(r, i1) +
483+
sub1 +
484+
originalStr.slice(i1)
485+
);
486+
} else {
487+
// sub2 插入在 sub1 的后面
488+
const r_orig = r - 1;
489+
return (
490+
originalStr.slice(0, i1) +
491+
sub1 +
492+
originalStr.slice(i1, r_orig) +
493+
sub2 +
494+
originalStr.slice(r_orig)
495+
);
496+
}
497+
}
498+
452499
export function preCheck_OLD(inp) {
453500
let input = String(inp);
454501
let size = input.length; //第一次遍历字符数组的函数,负责判断给定的输入类型。

0 commit comments

Comments
 (0)