Skip to content
Merged
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
57 changes: 36 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<div align=center>
<h3>Abracadabra 魔曰</h3>

<h3>下一代文本加密工具</h3>
<h3>熔古铸今,韵入密语</h3>
</div>

<div align=center>
Expand Down Expand Up @@ -35,8 +35,8 @@

</div>

**Abracadabra(魔曰)** 是一个安全高效的文本加密工具,对任意给定数据进行加密处理
完全开源,易于部署,易于使用。
**Abracadabra(魔曰)** 是开源,安全,高效的文本加密工具
将数据加密为汉字构成的文言文,完全开源,易于部署,易于使用。

---

Expand All @@ -49,30 +49,44 @@

- **仿真,使用文言语法句式**。
- 开源,所有源代码公开可查。
- 随机,加密结果具有随机性
- 安全,AES256 + 三重转轮混淆
- 双模式,同时支持仿真加密和传统加密
- 安全,完全离线的AES加密
- 可靠,代码经过严格单元测试
- 便捷,易于本地部署和使用

### **古文仿真:崭新的加密方案**
<br>
<sub>
<i>

与此同时,魔曰也支持[传统加密](https://github.com/SheepChef/Abracadabra/blob/main/USAGE.md#%E4%BC%A0%E7%BB%9F%E6%A8%A1%E5%BC%8F)。

传统加密模式类似熊曰、佛曰、兽音译者等此前流行的算法。

</i>
</sub>

---

### **熔古铸今:文言文仿真加密**

> 鹏彰于物,不必奏也。捷天谨走,城光益添,和人弥任,铃夜皆写,呈雨以登铃。
>
> 光韵开云,雅于莺茶,停而行之之谓速。是故无悦无谜,无瑞无聪,裳之所走、树之所振也。旧铃之纯水,常为悦水之莹风。人曰:“瑞琴之路,常留于其所允行而不读之处。” 璃非笑而去之者,孰可无鹏。非将选也,非可指也,书非当事涧,仍继叶言,奈何,同森而非航水也,能鸢者益。
>

构造高仿真文言文,**参考《古文观止》《经史百家杂钞》《古文辞类纂》等古代典籍。**
加密强度不变,但引入更复杂的组句/语法选择机制,将密码学与中国古典语言学相融合
标准AES256加密,引入更复杂的组句/语法选择机制,将密码和中国古典文言文相融合

密文高度随机,支持用户自定义随机性和文本风格偏好,打造前所未有的跨文化数字加密方案。

<div style="width: 350px; height: 57px; border: 1px solid #BBBBBB;"><a href="https://ctext.org/zhs"><img src="https://ctext.org/logos/ctplogo6.gif" border="0" alt="中国哲学书电子化计划" /></a></div>

## 快速使用

请查阅 [**部署指南**](DEPLOY.md) 来了解详细使用方法。

开发者请查阅 [**部署指南**](DEPLOY.md) 来了解详细部署方法。
要部署前端网页,请查阅 Release 和前端源代码仓库。

如果你是普通用户,请参考本文下方的内容。

### JavaScript

使用 npm 下载 Abracadabra 库。
Expand Down Expand Up @@ -164,7 +178,7 @@ Abracadabra 以最常用的 3000 个汉字为密本,对大小写拉丁字母

映射表公开可查,查阅 [**映射表(传统)**](https://github.com/SheepChef/Abracadabra/blob/main/src/javascript/mapping.json) 或者 [**映射表(仿真)**](https://github.com/SheepChef/Abracadabra/blob/main/src/javascript/mapping_next.json) 以了解密本的全貌。

### AES-256-CTR
### AES 加密

核心安全性由久经考验的 AES 加密算法提供,采用无填充的AES-256-CTR,节省密文长度。

Expand All @@ -180,30 +194,29 @@ AES 加密密钥和转轮密钥是同一个,均采用哈希值。

数字/符号,字母分别拥有一套转轮,即总共六个转轮,改变密钥相当于更换一套完全不同的转轮。

转轮显著增加了 Base64 密文的安全性,查阅 [**Issue#30**](https://github.com/SheepChef/Abracadabra/issues/30) 来了解转轮的详细运行机制。
转轮显著增加了 Base64 密文的安全性,查阅 [**细节和使用指南**](https://github.com/SheepChef/Abracadabra/blob/main/USAGE.md) 来了解转轮的详细运行机制。

### 压缩

为了削减密文的长度,每次加密前会对数据进行智能压缩。

针对短文本,采用专门为短文本优化的 Unishox2 压缩算法。
一般数据则采用GZIP
一般数据(>1KB)则采用GZIP

压缩后会执行效率验证,如果出现无效压缩,则自动回落到原始数据。

### 随机性
## 密文对比

在映射为汉字的时候,每个字母/数字/符号均有多种可能性,完全随机选择。
```
明文:Abracadabra

这显著增强了密文的安全性,使得各种攻击难以奏效
魔曰(仿真):不应报也。树将棋之,书曰:“天水探火,临于云楼” ,夜乃写定绸之莺,指之不为火,换之不为苗

## 比较
魔曰(仿真):流霞以停空,局返,作文换雪。不可彰也,火之无灯,璃说之文,智鸢湛事。

```
明文:Abracadabra
魔曰(传统):桨捷欤网炯棠囍设声沢仅氖城织把夹短阐瑞玖祉作

魔曰(仿真):铃有将报,局有竟然。故探盈声者,当度青莺之静云。非木也,琴与树换,振棋以至雁。
魔曰(传统):困句夏之全玚凪斋或骏琅咨兆咩谜理金说宙银歌舒
<-- ↓↓对比项目↓↓ -->

熊曰:呋食性類啽家現出爾常肉嘿達嗷很
佛曰:諸南隸僧南降南吽諸陀南摩隸南僧南缽南薩咤南心彌嚴迦聞婆吽願南眾南色南兜南眾南如婆如南
Expand All @@ -221,6 +234,8 @@ AES 加密密钥和转轮密钥是同一个,均采用哈希值。

感谢 [**@Amlkiller**](https://github.com/amlkiller) 为本项目提供十分有价值的反馈和建议。

感谢 **熊曰(与熊论道)、佛曰、兽音译者** 为本项目提供灵感和参考。

感谢贡献 PR 和参与测试的其他所有人,以及**正在使用本项目的您**。

## 开放源代码许可
Expand Down
4 changes: 3 additions & 1 deletion USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,14 @@ fjhigkabcde....

载荷将被预先按比例分为 Begin, Main, End 三部分,对应一段密文的三节,每节都拥有一个不同的句式库。

实际上的载荷分配,和句式选择同时进行。有两种策略,分别是贪心算法和随机分配,每个分配步骤都会选择二者之一。
有两种策略,分别是贪心算法和随机分配,每个分配步骤都会选择二者之一。

贪心算法在每一步尽可能大地分配载荷,从而得到一个较为整齐的分配结果。

用户可以指定更高的随机因子,增加随机分配的概率(最大100%),从而得到更加零碎的分配结果。

针对载荷分配,还引入了额外步骤以打乱/合并过于零碎的载荷,尽可能防止密文产生连续的重复模式。

#### 句式模板和密表

句式模板有一个固定的语法,以辅助解析。
Expand Down

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions docs/assets/index-B_doPvbq.js

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion docs/assets/index-DsCieFLk.js

This file was deleted.

4 changes: 2 additions & 2 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
return this._attachShadow({ mode: "open" });
};
</script>
<script type="module" crossorigin src="./assets/index-DsCieFLk.js"></script>
<script type="module" crossorigin src="./assets/index-B_doPvbq.js"></script>
<link rel="modulepreload" crossorigin href="./assets/deps-CXr6hmS8.js">
<link rel="modulepreload" crossorigin href="./assets/abracadabra-cn-75macEsP.js">
<link rel="modulepreload" crossorigin href="./assets/abracadabra-cn-BTUscUVB.js">
<link rel="stylesheet" crossorigin href="./assets/deps-PoZXHJHQ.css">
<link rel="stylesheet" crossorigin href="./assets/index-B3tl3MZY.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
Expand Down
2 changes: 1 addition & 1 deletion docs/sw.js

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

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.9",
"version": "3.1.10",
"main": "./dist/abracadabra-cn.js",
"type": "module",
"scripts": {
Expand Down
10 changes: 5 additions & 5 deletions src/javascript/main.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,31 +55,31 @@ test("加/解密测试", { timeout: 15000 }, () => {
let TestTemp3 = TestString;

//将随机字符串用仿真加密循环加/解密6次,判断一致性和中途是否出错。
for (let i = 0; i <= 5; i++) {
for (let i = 0; i <= 6; i++) {
Abra.Input_Next(
TestTemp,
"ENCRYPT",
"ABRACADABRA",
i % 2 == 0,
100,
50,
i % 2 == 0,
i % 2 != 0
);
TestTemp = Abra.Output();
}

for (let i = 0; i <= 5; i++) {
for (let i = 0; i <= 6; i++) {
Abra.Input_Next(TestTemp, "DECRYPT", "ABRACADABRA");
TestTemp = Abra.Output();
}

//将随机字符串用传统加密循环加/解密6次,判断一致性和中途是否出错。
for (let i = 0; i <= 5; i++) {
for (let i = 0; i <= 6; i++) {
Abra.Input(TestTemp2, "ENCRYPT", "ABRACADABRA", true);
TestTemp2 = Abra.Output();
}

for (let i = 0; i <= 5; i++) {
for (let i = 0; i <= 6; i++) {
Abra.Input(TestTemp2, "DECRYPT", "ABRACADABRA");
TestTemp2 = Abra.Output();
}
Expand Down
2 changes: 2 additions & 0 deletions src/javascript/mapping_next.json
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@
"6B/A/N/zhi/N/,/V/zhi/以/V/其/N",
"6B/A/N/V/于/N/而/V/N",
"6B/A/N/未/V/N/、/N/之/N",
"6B/V/A/N/若/V/A/N",
"6D/不/V/N/,/不/V/N/,/当/以/AD/V/论/P",
"6D/A/则为/V/N/,/A/则为/V/N/P",
"6D/若/居/A/N/之/N/,/则/当/A/N/之/V/P",
Expand Down Expand Up @@ -442,6 +443,7 @@
"5C/N/之/无/N/,/N/V/之/N",
"6D/N/A/N/A/,/则/所/V/得/其/A/P",
"6B/以/N/V/,/like/V/N/V/N",
"6B/V/A/N/若/V/A/N",
"6C/N/V/,/V/N/V/N",
"6E/虽/V/V/A/A/,/A/A/不/同/P",
"6D/而/A/N/zhi/N/,/V/zhi/以/V/其/N/P",
Expand Down
Loading