Skip to content

Commit e3171c8

Browse files
authored
Update V3.2.0
V3.2.0
2 parents 5ad030f + 16b21c9 commit e3171c8

21 files changed

+2678
-2815
lines changed

JavyInputAppendix.js

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,19 @@
1818
传入的参数应当是JSON
1919
2020
{
21-
"method":"", // NEXT | OLD
21+
"method":"", // WENYAN | OLD
2222
"inputType":"", // TEXT | UINT8
2323
"outputType":"", // TEXT | UINT8
24-
"input":"", //输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
24+
"input":"", // 输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
2525
"mode":"", // ENCRYPT | DECRYPT | AUTO // AUTO 仅在 method 指定 OLD 时合法
26-
"key":"", //加密密钥,一个字符串 //如果缺省,自动使用默认值
27-
"q":bool, //OLD模式下,决定是否添加标志位 | NEXT模式下,决定输出密文是否有标点符号
28-
"r":number, //仅NEXT模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
29-
"p":bool, //仅NEXT模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
30-
"l":bool, //仅NEXT模式下需要:尽可能使用逻辑句式; 与骈文句式冲突
31-
26+
"key":"", // 加密密钥,一个字符串 //如果缺省,自动使用默认值
27+
"q":bool, // OLD模式下,决定是否添加标志位
28+
"WenyanConfig":{ //文言文生成配置,解密时可以缺省。
29+
"PunctuationMark": bool;// 指定是否为密文添加标点符号,默认 true/添加;
30+
"RandomIndex":number, // 仅WENYAN模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
31+
"PianwenMode":bool, // 仅WENYAN模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
32+
"LogicMode":bool, // 仅WENYAN模式下需要:尽可能使用逻辑句式; 与骈文句式冲突
33+
},
3234
}
3335
3436
*/
@@ -62,18 +64,10 @@ function index(input) {
6264
return "INCORRECT JSON";
6365
}
6466

65-
if (input.method == "NEXT") {
67+
if (input.method == "WENYAN") {
6668
if (input.inputType == "TEXT") {
6769
let Abra = new Abracadabra(input.inputType, input.outputType);
68-
Abra.Input_Next(
69-
input.input,
70-
input.mode,
71-
input.key,
72-
input.q,
73-
input.r,
74-
input.p,
75-
input.l
76-
);
70+
Abra.WenyanInput(input.input, input.mode, input.key, input.WenyanConfig);
7771
let Output = Abra.Output();
7872
if (input.outputType == "UINT8") {
7973
Output = uint8ArrayToBase64(Output);
@@ -82,15 +76,7 @@ function index(input) {
8276
} else if (input.inputType == "UINT8") {
8377
let Abra = new Abracadabra(input.inputType, input.outputType);
8478
let UINT8In = base64ToUint8Array(input.input);
85-
Abra.Input_Next(
86-
UINT8In,
87-
input.mode,
88-
input.key,
89-
input.q,
90-
input.r,
91-
input.p,
92-
input.l
93-
);
79+
Abra.WenyanInput(UINT8In, input.mode, input.key, input.WenyanConfig);
9480
let Output = Abra.Output();
9581
if (input.outputType == "UINT8") {
9682
Output = uint8ArrayToBase64(Output);

docs/document/bench.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@
1414

1515
## 测试表格
1616

17-
| 模型/评测项 | 纯密文识别 (0) | 纯密文识别 (50) | 夹杂密文识别 (50) | 审核 | 分类 |
18-
| ------------------- | :------------: | :-------------: | :---------------: | :-----------: | :---------: |
19-
| DeepSeek R1 | ✅ (2/8) | ✅ (3/8) | ✅ (0/4) | ✅ 过审 | 文学 |
20-
| DeepSeek V3 | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ 过审 | 古典文学 |
21-
| GPT 4o | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ 过审 | 意象诗文 |
22-
| Qwen 2.5-72B | ✅ (3/8) | ❌ (4/4) | ✅ (0/4) | ✅ 过审 | 文学创作 |
23-
| Qwen QwQ-32B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) | 🟠 \*过审 | 古典文学 |
24-
| Qwen 3-235B-A22B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) | ✅ 过审 | 诗歌 |
25-
| ERNIE 4.5-300B-A47B | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ 过审 | 抽象文学 |
26-
| Kimi K2 Instruct | ✅ (1/8) | ✅ (3/8) | ✅ (0/4) | ✅ 过审 | 文学/散文诗 |
27-
| 腾讯云 内容安全服务 | —— | —— | —— | ✅ 过审(0/10) | —— |
28-
| 百度云 内容安全服务 | —— | —— | —— | ✅ 过审(0/10) | —— |
29-
| 阿里云 内容安全服务 | —— | —— | —— | ✅ 过审(0/10) | —— |
17+
| 模型/评测项 | 纯密文识别 (0) | 纯密文识别 (50) | 夹杂密文识别 (50) | 内容安全 | 分类 |
18+
| ------------------- | :------------: | :-------------: | :---------------: | :------: | :---------: |
19+
| DeepSeek R1 | ✅ (2/8) | ✅ (3/8) | ✅ (0/4) || 文学 |
20+
| DeepSeek V3 | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) || 古典文学 |
21+
| GPT 4o | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) || 意象诗文 |
22+
| Qwen 2.5-72B | ✅ (3/8) | ❌ (4/4) | ✅ (0/4) || 文学创作 |
23+
| Qwen QwQ-32B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) | 🟠\* | 古典文学 |
24+
| Qwen 3-235B-A22B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) || 诗歌 |
25+
| ERNIE 4.5-300B-A47B | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) || 抽象文学 |
26+
| Kimi K2 Instruct | ✅ (1/8) | ✅ (3/8) | ✅ (0/4) || 文学/散文诗 |
27+
| 腾讯云 内容安全 | —— | —— | —— || —— |
28+
| 百度云 内容安全 | —— | —— | —— || —— |
29+
| 阿里云 内容安全 | —— | —— | —— || —— |
30+
| 科大讯飞 内容安全 | —— | —— | —— || —— |

docs/document/comparison.md

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# 功能对比
22

3-
| 加密工具 | 开源 | 脱机运行 | 安全加密 | 仿真 | 压缩 | 易部署 |
4-
| ---------- | :--: | :------: | :------: | :--: | :--: | :----: |
5-
| 魔曰 |||||||
6-
| 与熊论道 ||||| 🟨 ||
7-
| 兽音译者 |||||||
8-
| 文本隐水印 |||||||
9-
| 新佛曰 ||| 🟨 ||||
10-
| 旧佛曰 |||||| 🟨 |
3+
| 加密工具 | 开源 | 脱机运行 | 安全加密 | 仿真 | 长度合理 | 易部署 |
4+
| ---------- | :--: | :------: | :------: | :--: | :------: | :----: |
5+
| 魔曰 |||||||
6+
| 与熊论道 |||||||
7+
| 兽音译者 |||||||
8+
| 新佛曰 ||| 🟨 ||||
9+
| 旧佛曰 |||||| 🟨 |
10+
| 文本隐水印 |||||||
11+
| 想曰 |||||||
1112

1213
### 注意:
1314

@@ -54,6 +55,16 @@
5455

5556
---
5657

58+
### 想曰
59+
60+
[想曰](https://github.com/fzxx/XiangYue)是一个开源项目,由 fzxx 开发。
61+
62+
它类似魔曰的传统加密模式,透过一个映射表映射经过压缩和加密的数据。
63+
64+
它使用多种算法加密数据,因此加密结果通常很长。生成的字符串是无意义的字符序列。
65+
66+
---
67+
5768
### 新佛曰
5869

5970
::: tip 佛曰密文示例

docs/document/js-deploy.md

Lines changed: 73 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -36,48 +36,89 @@ let Abra = new Abracadabra(InputMode, OutputMode);
3636

3737
`TEXT` 表明将来的输入/输出为 `String``UINT8` 表明将来的输入/输出为 `Uint8Array`,你可以灵活使用两种不同的类型。
3838

39-
### Input() 传统加密函数
39+
::: warning 接口兼容性须知
40+
旧的接口 `Input_Next()``Input()` 目前仍然可以使用,但未来的版本更新中会移除它们。
41+
:::
4042

41-
Abracadabra 库中仅有三个方法,`Input()` 是其中一个。
43+
::: tip 文件加/解密
44+
使用`Uint8Array`作为输入/输出方式,魔曰可以加解密任意二进制(图片/视频/任何文件),但是不推荐这么做。
45+
:::
46+
47+
### WenyanInput() 文言仿真加密函数
48+
49+
`WenyanInput()` 函数用来对数据执行文言文仿真加密。
4250

4351
```js
4452
import { Abracadabra } from "abracadabra-cn";
4553

4654
let Abra = new Abracadabra(); //不附带参数,
4755

48-
/*
49-
MODES:
50-
51-
Abracadabra.ENCRYPT = "ENCRYPT";
52-
强制加密
53-
54-
Abracadabra.DECRYPT = "DECRYPT";
55-
强制解密
56-
57-
Abracadabra.AUTO = "AUTO";
58-
自动(遵循自动逻辑)
59-
60-
*/
61-
Abra.Input(input, mode, key, q);
56+
/**
57+
* 魔曰 文言文加密模式
58+
*
59+
* @param {string | Uint8Array} input 输入的数据,根据此前指定的输入类型,可能是字符串或字节数组
60+
* @param {string} mode 指定模式,可以是 ENCRYPT DECRYPT 中的一种;
61+
* @param {string} key 指定密钥,默认是 ABRACADABRA;
62+
* @param {WenyanConfig} WenyanConfigObj 文言文的生成配置;
63+
* @return {number} 成功则返回 0(失败不会返回,会抛出异常)
64+
*/
65+
Abra.WenyanInput(input, mode, key, {...});
6266
```
6367

6468
第一个参数 `input` 接受两种类型的输入,分别是 `String``Uint8Array`,这是此前在实例化的时候指定的输入类型。
6569

6670
如果你指定了 `UINT8` 却传入 `String`,将抛出错误,反之亦然。
6771

68-
第二个参数 `mode` 接受上文中特定字符串的输入,任何其他输入都将被视为 `AUTO` 并被忽略
72+
第二个参数 `mode` 接受上文中特定字符串的输入,任何其他输入都将被忽略,不会输出任何结果
6973

7074
第三个参数 `key` 接受字符串类型的密钥输入,如果不提供,则默认使用内置密钥 `ABRACADABRA`
7175

7276
如果指定了错误的密码,那么在解码/解密数据校验过程中会抛出错误。
7377

74-
第四个参数 `q` 接受布尔值的输入,如果传入 `true`,则加密结果中将不含标志位,更加隐蔽,但解密时需要强制解密。
78+
第四个参数接受一个`WenyanConfig`配置对象的输入,仅在加密的时候需要:
79+
80+
```javascript
81+
export interface WenyanConfig {
82+
/** 指定是否为密文添加标点符号,默认 true/添加; */
83+
PunctuationMark?: boolean;
84+
/** 密文算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错; */
85+
RandomIndex?: number;
86+
/** 指定是否强制生成骈文密文,默认 false; */
87+
PianwenMode?: boolean;
88+
/** 指定是否强制生成逻辑密文,默认 false; */
89+
LogicMode?: boolean;
90+
}
91+
```
92+
93+
`PunctuationMark` 是布尔值,默认为 `true`。如果传入 `false`,则加密结果中将不含标点符号,解密时可以忽略这个参数。
94+
95+
`RandomIndex` 是整数值,默认为`50`,最小值`0`,最大值`100`,超过 100 的输入将会报错。输入值越大,载荷量选择算法的随机性越大;输入值为 0 时,句式选择步骤将只选择载荷字较多的那个。解密时可以忽略这个参数。
7596

76-
在无错误的情况下, `Input()` 函数的返回值通常是 `0`
97+
`PianwenMode` 是布尔值,不指定则默认为 `false`。如果传入 `true`,则加密结果会优先使用骈文句式,呈现四字到五字一组的对仗格律,这有助于减少密文的总体长度。解密时可以忽略这个参数
7798

78-
### Input_Next() 文言仿真加密函数
99+
`LogicMode` 是布尔值,默认为 `false`。如果传入 `true`,则加密结果会优先使用逻辑句式,呈现强论述类逻辑风格。解密时可以忽略这个参数。
79100

80-
`Input_Next()` 函数用来对数据执行文言文仿真加密。
101+
`PianwenMode``LogicMode` 不能同时指定为 `true`,否则会抛出错误。
102+
103+
```javascript
104+
//正确调用方式:
105+
106+
import { Abracadabra } from "abracadabra-cn";
107+
let Abra = new Abracadabra(); //不附带参数,
108+
109+
Abra.WenyanInput(TestTemp, "ENCRYPT", "ABRACADABRA", {
110+
RandomIndex: 25,
111+
PianwenMode: true,
112+
}); //指定随机指数为25,并使用骈文模式,缺省项自动使用默认值
113+
114+
Abra.WenyanInput(TestTemp, "DECRYPT", "ABRACADABRA"); //解密不需要传入配置
115+
```
116+
117+
在无错误的情况下, `WenyanInput()` 函数的返回值通常是 `0`
118+
119+
### OldInput() 传统加密函数
120+
121+
`OldInput()` 用传统模式加密密文。
81122

82123
```js
83124
import { Abracadabra } from "abracadabra-cn";
@@ -93,31 +134,26 @@ Abracadabra.ENCRYPT = "ENCRYPT";
93134
Abracadabra.DECRYPT = "DECRYPT";
94135
强制解密
95136
137+
Abracadabra.AUTO = "AUTO";
138+
自动(遵循自动逻辑)
139+
96140
*/
97-
Abra.Input_Next(input, mode, key, q, r, p, l);
141+
Abra.OldInput(input, mode, key, q);
98142
```
99143

100144
第一个参数 `input` 接受两种类型的输入,分别是 `String``Uint8Array`,这是此前在实例化的时候指定的输入类型。
101145

102146
如果你指定了 `UINT8` 却传入 `String`,将抛出错误,反之亦然。
103147

104-
第二个参数 `mode` 接受上文中特定字符串的输入,任何其他输入都将被忽略,不会输出任何结果
148+
第二个参数 `mode` 接受上文中特定字符串的输入,任何其他输入都将被视为 `AUTO` 并被忽略
105149

106150
第三个参数 `key` 接受字符串类型的密钥输入,如果不提供,则默认使用内置密钥 `ABRACADABRA`
107151

108152
如果指定了错误的密码,那么在解码/解密数据校验过程中会抛出错误。
109153

110-
第四个参数 `q` 接受布尔值的输入,默认为 `true`。如果传入 `false`,则加密结果中将不含标点符号,解密时可以忽略这个参数。
111-
112-
第五个参数 `r` 接受整数值的输入,默认为`50`,最小值`0`,最大值`100`,超过 100 的输入将会报错。输入值越大,载荷量选择算法的随机性越大;输入值为 0 时,句式选择步骤将只选择载荷字较多的那个。解密时可以忽略这个参数。
113-
114-
第六个参数 `p` 接受布尔值的输入,默认为 `false`。如果传入 `true`,则加密结果会优先使用骈文句式,呈现四字到五字一组的对仗格律,这有助于减少密文的总体长度。解密时可以忽略这个参数。
115-
116-
第七个参数 `l` 接受布尔值的输入,默认为 `false`。如果传入 `true`,则加密结果会优先使用逻辑句式,呈现强论述类逻辑风格。解密时可以忽略这个参数。
117-
118-
`p``l` 不能同时指定为 `true`,否则会抛出错误。
154+
第四个参数 `q` 接受布尔值的输入,如果传入 `true`,则加密结果中将不含标志位,更加隐蔽,但解密时需要强制解密。
119155

120-
在无错误的情况下, `Input_Next()` 函数的返回值通常是 `0`
156+
在无错误的情况下, `OldInput()` 函数的返回值通常是 `0`
121157

122158
### Output()
123159

@@ -126,12 +162,12 @@ import { Abracadabra } from "abracadabra-cn";
126162

127163
let Abra = new Abracadabra(); //不附带参数,
128164

129-
Abra.Input(input, mode, key, q);
165+
Abra.OldInput(input, mode, key, q);
130166

131167
let Result = Abra.Output(); //获取输出
132168
```
133169

134-
在调用 `Output()` 之前,你需要至少调用过一次 `Input()`,否则将会抛出错误。
170+
在调用 `Output()` 之前,你需要至少调用过一次 `WenyanInput()` 或者 `OldInput()`,否则将会抛出错误。
135171

136172
调用 `Output()` 将获得此前输入的处理结果,其返回类型可能是 `String``Uint8Array`,取决于对象实例化时指定了何种输出模式。
137173

@@ -176,10 +212,10 @@ npm run build
176212
```
177213

178214
如果你对密码映射表做出了修改,那么请确保将 JSON 压缩成一行,转义成字符串。
179-
然后修改 `utils.js`(传统加密) 或者 `utils_next.js`(文言加密):
215+
然后修改 `ChineseMappingHelper.js` 中的 `OldMapper`(传统加密) 或者 `WenyanSimulator`(文言加密):
180216

181217
```js
182-
const Map = "...."; // 字符串内填密码映射表
218+
this.Map = "...."; // 字符串内填密码映射表
183219
```
184220

185221
在执行编译时,会自动对文言文密本中的句式语法执行检查,如果有问题,则会报错并提示编译失败。

docs/document/wasm-deploy.md

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,25 @@
1010

1111
本模块的合法输入为一个 JSON 字符串,输入时请勿附带注释,遵循以下格式:
1212

13+
::: warning 兼容性提示
14+
注意,V3.2 修改了接口标准,WASM 未对旧版本留有兼容,请参照新版接口来编写调用方式。
15+
:::
16+
1317
```json
1418
{
15-
"method":"", // NEXT | OLD
19+
"method":"", // WENYAN | OLD
1620
"inputType":"", // TEXT | UINT8
1721
"outputType":"", // TEXT | UINT8
18-
"input":"", //输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
22+
"input":"", // 输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
1923
"mode":"", // ENCRYPT | DECRYPT | AUTO // AUTO 仅在 method 指定 OLD 时合法
20-
"key":"", //加密密钥,一个字符串 //如果缺省,自动使用默认值
21-
"q":bool, //OLD模式下,决定是否添加标志位 | NEXT模式下,决定输出密文是否有标点符号
22-
"r":number, //仅NEXT模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
23-
"p":bool, //仅NEXT模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
24-
"l":bool, //仅NEXT模式下需要:尽可能使用逻辑句式; 与骈文句式冲突
25-
24+
"key":"", // 加密密钥,一个字符串 //如果缺省,自动使用默认值
25+
"q":bool, // OLD模式下,决定是否添加标志位
26+
"WenyanConfig":{ //文言文生成配置,可以缺省,缺省自动使用默认值。
27+
"PunctuationMark": bool, // 指定是否为密文添加标点符号,默认 true/添加;
28+
"RandomIndex": number, // 仅WENYAN模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
29+
"PianwenMode":bool, // 仅WENYAN模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
30+
"LogicMode":bool, // 仅WENYAN模式下需要:尽可能使用逻辑句式; 与骈文句式冲突
31+
},
2632
}
2733
```
2834

@@ -33,7 +39,7 @@
3339
注意在 Windows CMD 中,输入的字符串**不需要**用单引号囊括。
3440

3541
```sh
36-
echo '{"method":"NEXT","mode":"ENCRYPT","inputType":"TEXT","outputType":"TEXT","input":"愿青空的祝福,与我的羽翼同在","key":"ABRACADABRA","q":true,"r":50,"p":false,"l":false}' | wasmtime abracadabra-cn.wasm
42+
echo '{"method":"WENYAN","mode":"ENCRYPT","inputType":"TEXT","outputType":"TEXT","input":"愿青空的祝福,与我的羽翼同在","key":"ABRACADABRA","WenyanConfig":{"PianwenMode":true}}' | wasmtime abracadabra-cn.wasm
3743
```
3844

3945
对于其他语言,你需要使用 Wasmtime WASI 的 `stdin``stdout` 接口来操作本模块的输入输出,调用 `_start` 方法来启动本模块。

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "abracadabra-cn",
33
"description": "Use Chinese to Encode Everything",
44
"private": false,
5-
"version": "3.1.11",
5+
"version": "3.2.0",
66
"main": "./dist/abracadabra-cn.js",
77
"types": "./dist/abracadabra-cn.d.ts",
88
"type": "module",

0 commit comments

Comments
 (0)