Skip to content
Merged

V3.2 #110

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 13 additions & 27 deletions JavyInputAppendix.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,19 @@
传入的参数应当是JSON

{
"method":"", // NEXT | OLD
"method":"", // WENYAN | OLD
"inputType":"", // TEXT | UINT8
"outputType":"", // TEXT | UINT8
"input":"", //输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
"input":"", // 输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
"mode":"", // ENCRYPT | DECRYPT | AUTO // AUTO 仅在 method 指定 OLD 时合法
"key":"", //加密密钥,一个字符串 //如果缺省,自动使用默认值
"q":bool, //OLD模式下,决定是否添加标志位 | NEXT模式下,决定输出密文是否有标点符号
"r":number, //仅NEXT模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
"p":bool, //仅NEXT模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
"l":bool, //仅NEXT模式下需要:尽可能使用逻辑句式; 与骈文句式冲突

"key":"", // 加密密钥,一个字符串 //如果缺省,自动使用默认值
"q":bool, // OLD模式下,决定是否添加标志位
"WenyanConfig":{ //文言文生成配置,解密时可以缺省。
"PunctuationMark": bool;// 指定是否为密文添加标点符号,默认 true/添加;
"RandomIndex":number, // 仅WENYAN模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
"PianwenMode":bool, // 仅WENYAN模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
"LogicMode":bool, // 仅WENYAN模式下需要:尽可能使用逻辑句式; 与骈文句式冲突
},
}

*/
Expand Down Expand Up @@ -62,18 +64,10 @@ function index(input) {
return "INCORRECT JSON";
}

if (input.method == "NEXT") {
if (input.method == "WENYAN") {
if (input.inputType == "TEXT") {
let Abra = new Abracadabra(input.inputType, input.outputType);
Abra.Input_Next(
input.input,
input.mode,
input.key,
input.q,
input.r,
input.p,
input.l
);
Abra.WenyanInput(input.input, input.mode, input.key, input.WenyanConfig);
let Output = Abra.Output();
if (input.outputType == "UINT8") {
Output = uint8ArrayToBase64(Output);
Expand All @@ -82,15 +76,7 @@ function index(input) {
} else if (input.inputType == "UINT8") {
let Abra = new Abracadabra(input.inputType, input.outputType);
let UINT8In = base64ToUint8Array(input.input);
Abra.Input_Next(
UINT8In,
input.mode,
input.key,
input.q,
input.r,
input.p,
input.l
);
Abra.WenyanInput(UINT8In, input.mode, input.key, input.WenyanConfig);
let Output = Abra.Output();
if (input.outputType == "UINT8") {
Output = uint8ArrayToBase64(Output);
Expand Down
27 changes: 14 additions & 13 deletions docs/document/bench.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,17 @@

## 测试表格

| 模型/评测项 | 纯密文识别 (0) | 纯密文识别 (50) | 夹杂密文识别 (50) | 审核 | 分类 |
| ------------------- | :------------: | :-------------: | :---------------: | :-----------: | :---------: |
| DeepSeek R1 | ✅ (2/8) | ✅ (3/8) | ✅ (0/4) | ✅ 过审 | 文学 |
| DeepSeek V3 | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ 过审 | 古典文学 |
| GPT 4o | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ 过审 | 意象诗文 |
| Qwen 2.5-72B | ✅ (3/8) | ❌ (4/4) | ✅ (0/4) | ✅ 过审 | 文学创作 |
| Qwen QwQ-32B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) | 🟠 \*过审 | 古典文学 |
| Qwen 3-235B-A22B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) | ✅ 过审 | 诗歌 |
| ERNIE 4.5-300B-A47B | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ 过审 | 抽象文学 |
| Kimi K2 Instruct | ✅ (1/8) | ✅ (3/8) | ✅ (0/4) | ✅ 过审 | 文学/散文诗 |
| 腾讯云 内容安全服务 | —— | —— | —— | ✅ 过审(0/10) | —— |
| 百度云 内容安全服务 | —— | —— | —— | ✅ 过审(0/10) | —— |
| 阿里云 内容安全服务 | —— | —— | —— | ✅ 过审(0/10) | —— |
| 模型/评测项 | 纯密文识别 (0) | 纯密文识别 (50) | 夹杂密文识别 (50) | 内容安全 | 分类 |
| ------------------- | :------------: | :-------------: | :---------------: | :------: | :---------: |
| DeepSeek R1 | ✅ (2/8) | ✅ (3/8) | ✅ (0/4) | ✅ | 文学 |
| DeepSeek V3 | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ | 古典文学 |
| GPT 4o | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ | 意象诗文 |
| Qwen 2.5-72B | ✅ (3/8) | ❌ (4/4) | ✅ (0/4) | ✅ | 文学创作 |
| Qwen QwQ-32B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) | 🟠\* | 古典文学 |
| Qwen 3-235B-A22B | ✅ (0/4) | ✅ (1/8) | ✅ (0/4) | ✅ | 诗歌 |
| ERNIE 4.5-300B-A47B | ✅ (0/4) | ✅ (0/4) | ✅ (0/4) | ✅ | 抽象文学 |
| Kimi K2 Instruct | ✅ (1/8) | ✅ (3/8) | ✅ (0/4) | ✅ | 文学/散文诗 |
| 腾讯云 内容安全 | —— | —— | —— | ✅ | —— |
| 百度云 内容安全 | —— | —— | —— | ✅ | —— |
| 阿里云 内容安全 | —— | —— | —— | ✅ | —— |
| 科大讯飞 内容安全 | —— | —— | —— | ✅ | —— |
27 changes: 19 additions & 8 deletions docs/document/comparison.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# 功能对比

| 加密工具 | 开源 | 脱机运行 | 安全加密 | 仿真 | 压缩 | 易部署 |
| ---------- | :--: | :------: | :------: | :--: | :--: | :----: |
| 魔曰 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 与熊论道 | ❌ | ❌ | ❌ | ❌ | 🟨 | ❌ |
| 兽音译者 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 文本隐水印 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 新佛曰 | ❌ | ❌ | 🟨 | ❌ | ❌ | ❌ |
| 旧佛曰 | ✅ | ✅ | ❌ | ❌ | ❌ | 🟨 |
| 加密工具 | 开源 | 脱机运行 | 安全加密 | 仿真 | 长度合理 | 易部署 |
| ---------- | :--: | :------: | :------: | :--: | :------: | :----: |
| 魔曰 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 与熊论道 | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| 兽音译者 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 新佛曰 | ❌ | ❌ | 🟨 | ❌ | ❌ | ❌ |
| 旧佛曰 | ✅ | ✅ | ❌ | ❌ | ❌ | 🟨 |
| 文本隐水印 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 想曰 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |

### 注意:

Expand Down Expand Up @@ -54,6 +55,16 @@

---

### 想曰

[想曰](https://github.com/fzxx/XiangYue)是一个开源项目,由 fzxx 开发。

它类似魔曰的传统加密模式,透过一个映射表映射经过压缩和加密的数据。

它使用多种算法加密数据,因此加密结果通常很长。生成的字符串是无意义的字符序列。

---

### 新佛曰

::: tip 佛曰密文示例
Expand Down
110 changes: 73 additions & 37 deletions docs/document/js-deploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,48 +36,89 @@ let Abra = new Abracadabra(InputMode, OutputMode);

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

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

Abracadabra 库中仅有三个方法,`Input()` 是其中一个。
::: tip 文件加/解密
使用`Uint8Array`作为输入/输出方式,魔曰可以加解密任意二进制(图片/视频/任何文件),但是不推荐这么做。
:::

### WenyanInput() 文言仿真加密函数

`WenyanInput()` 函数用来对数据执行文言文仿真加密。

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

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

/*
MODES:

Abracadabra.ENCRYPT = "ENCRYPT";
强制加密

Abracadabra.DECRYPT = "DECRYPT";
强制解密

Abracadabra.AUTO = "AUTO";
自动(遵循自动逻辑)

*/
Abra.Input(input, mode, key, q);
/**
* 魔曰 文言文加密模式
*
* @param {string | Uint8Array} input 输入的数据,根据此前指定的输入类型,可能是字符串或字节数组
* @param {string} mode 指定模式,可以是 ENCRYPT DECRYPT 中的一种;
* @param {string} key 指定密钥,默认是 ABRACADABRA;
* @param {WenyanConfig} WenyanConfigObj 文言文的生成配置;
* @return {number} 成功则返回 0(失败不会返回,会抛出异常)
*/
Abra.WenyanInput(input, mode, key, {...});
```

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

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

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

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

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

第四个参数 `q` 接受布尔值的输入,如果传入 `true`,则加密结果中将不含标志位,更加隐蔽,但解密时需要强制解密。
第四个参数接受一个`WenyanConfig`配置对象的输入,仅在加密的时候需要:

```javascript
export interface WenyanConfig {
/** 指定是否为密文添加标点符号,默认 true/添加; */
PunctuationMark?: boolean;
/** 密文算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错; */
RandomIndex?: number;
/** 指定是否强制生成骈文密文,默认 false; */
PianwenMode?: boolean;
/** 指定是否强制生成逻辑密文,默认 false; */
LogicMode?: boolean;
}
```

`PunctuationMark` 是布尔值,默认为 `true`。如果传入 `false`,则加密结果中将不含标点符号,解密时可以忽略这个参数。

`RandomIndex` 是整数值,默认为`50`,最小值`0`,最大值`100`,超过 100 的输入将会报错。输入值越大,载荷量选择算法的随机性越大;输入值为 0 时,句式选择步骤将只选择载荷字较多的那个。解密时可以忽略这个参数。

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

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

`Input_Next()` 函数用来对数据执行文言文仿真加密。
`PianwenMode` 和 `LogicMode` 不能同时指定为 `true`,否则会抛出错误。

```javascript
//正确调用方式:

import { Abracadabra } from "abracadabra-cn";
let Abra = new Abracadabra(); //不附带参数,

Abra.WenyanInput(TestTemp, "ENCRYPT", "ABRACADABRA", {
RandomIndex: 25,
PianwenMode: true,
}); //指定随机指数为25,并使用骈文模式,缺省项自动使用默认值

Abra.WenyanInput(TestTemp, "DECRYPT", "ABRACADABRA"); //解密不需要传入配置
```

在无错误的情况下, `WenyanInput()` 函数的返回值通常是 `0`。

### OldInput() 传统加密函数

`OldInput()` 用传统模式加密密文。

```js
import { Abracadabra } from "abracadabra-cn";
Expand All @@ -93,31 +134,26 @@ Abracadabra.ENCRYPT = "ENCRYPT";
Abracadabra.DECRYPT = "DECRYPT";
强制解密

Abracadabra.AUTO = "AUTO";
自动(遵循自动逻辑)

*/
Abra.Input_Next(input, mode, key, q, r, p, l);
Abra.OldInput(input, mode, key, q);
```

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

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

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

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

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

第四个参数 `q` 接受布尔值的输入,默认为 `true`。如果传入 `false`,则加密结果中将不含标点符号,解密时可以忽略这个参数。

第五个参数 `r` 接受整数值的输入,默认为`50`,最小值`0`,最大值`100`,超过 100 的输入将会报错。输入值越大,载荷量选择算法的随机性越大;输入值为 0 时,句式选择步骤将只选择载荷字较多的那个。解密时可以忽略这个参数。

第六个参数 `p` 接受布尔值的输入,默认为 `false`。如果传入 `true`,则加密结果会优先使用骈文句式,呈现四字到五字一组的对仗格律,这有助于减少密文的总体长度。解密时可以忽略这个参数。

第七个参数 `l` 接受布尔值的输入,默认为 `false`。如果传入 `true`,则加密结果会优先使用逻辑句式,呈现强论述类逻辑风格。解密时可以忽略这个参数。

`p` 和 `l` 不能同时指定为 `true`,否则会抛出错误。
第四个参数 `q` 接受布尔值的输入,如果传入 `true`,则加密结果中将不含标志位,更加隐蔽,但解密时需要强制解密。

在无错误的情况下, `Input_Next()` 函数的返回值通常是 `0`。
在无错误的情况下, `OldInput()` 函数的返回值通常是 `0`。

### Output()

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

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

Abra.Input(input, mode, key, q);
Abra.OldInput(input, mode, key, q);

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

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

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

Expand Down Expand Up @@ -176,10 +212,10 @@ npm run build
```

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

```js
const Map = "...."; // 字符串内填密码映射表
this.Map = "...."; // 字符串内填密码映射表
```

在执行编译时,会自动对文言文密本中的句式语法执行检查,如果有问题,则会报错并提示编译失败。
Expand Down
24 changes: 15 additions & 9 deletions docs/document/wasm-deploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,25 @@

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

::: warning 兼容性提示
注意,V3.2 修改了接口标准,WASM 未对旧版本留有兼容,请参照新版接口来编写调用方式。
:::

```json
{
"method":"", // NEXT | OLD
"method":"", // WENYAN | OLD
"inputType":"", // TEXT | UINT8
"outputType":"", // TEXT | UINT8
"input":"", //输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
"input":"", // 输入的数据,如果是TEXT请直接输入纯文本,如果是任意字节,请输入Base64编码字符串
"mode":"", // ENCRYPT | DECRYPT | AUTO // AUTO 仅在 method 指定 OLD 时合法
"key":"", //加密密钥,一个字符串 //如果缺省,自动使用默认值
"q":bool, //OLD模式下,决定是否添加标志位 | NEXT模式下,决定输出密文是否有标点符号
"r":number, //仅NEXT模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
"p":bool, //仅NEXT模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
"l":bool, //仅NEXT模式下需要:尽可能使用逻辑句式; 与骈文句式冲突

"key":"", // 加密密钥,一个字符串 //如果缺省,自动使用默认值
"q":bool, // OLD模式下,决定是否添加标志位
"WenyanConfig":{ //文言文生成配置,可以缺省,缺省自动使用默认值。
"PunctuationMark": bool, // 指定是否为密文添加标点符号,默认 true/添加;
"RandomIndex": number, // 仅WENYAN模式下需要:算法的随机程度,越大随机性越强,默认 50,最大100,超过100将会出错;
"PianwenMode":bool, // 仅WENYAN模式下需要:尽可能使用对仗的骈文句式; 与逻辑句式冲突
"LogicMode":bool, // 仅WENYAN模式下需要:尽可能使用逻辑句式; 与骈文句式冲突
},
}
```

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

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

对于其他语言,你需要使用 Wasmtime WASI 的 `stdin` 和 `stdout` 接口来操作本模块的输入输出,调用 `_start` 方法来启动本模块。
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "abracadabra-cn",
"description": "Use Chinese to Encode Everything",
"private": false,
"version": "3.1.11",
"version": "3.2.0",
"main": "./dist/abracadabra-cn.js",
"types": "./dist/abracadabra-cn.d.ts",
"type": "module",
Expand Down
Loading