Abracadabra(魔曰) 是一个安全高效的文本脱敏加密工具,对任意给定数据进行处理。
由此使数据不易被自动过滤识别,减低封删率,增加审核成本。
请查阅 部署指南 快速开始使用本项目。
要深入了解本项目的设计思路,内部机制和最佳实践,请查阅 细节和使用指南
- 仿真,使用文言语法句式。
- 简短,密文简短方便传播。
- 随机,加密结果具有随机性。
- 安心,密码表中已剔除敏感汉字。
- 安全,AES256 + 三重转轮混淆。
- 双模式,同时支持仿真加密和传统加密。
定雪以关雨,故选速文者,当事浩鹏之纯茶。作必与其雀,而航欲任以铃者,楼也。但欲极者遥,雪无文,无以致花。
莺在悦岩,遥城之近,游于璃。乐林曰,是故无极无畅,无纯无静,叶之所走、心之所停也。信俊灯,光善韵银,乃稍旅。秀兰能长雨之怡,行光中之迷,鹤定而瑞裳事也。文欲取庭弹度,却琴心益求,非叶也。
生成高仿真文言文,参考康熙二十三年《古文观止》真实语料。
与传统方案一致的高强度加密,更复杂的组句/语法选择机制,更先进的消息隐写。
密文高度随机,支持用户自行选择密文的随机性。
请查阅 部署指南 来了解详细使用方法。
旧的 C++ 版本已被废弃,不再受后向兼容维护。
使用 npm 下载 Abracadabra 库。
你也可以前往 Release 页面直接下载Js文件。
npm install abracadabra-cn
然后,在项目中引入库文件
import { Abracadabra } from "abracadabra-cn";
前往 Release 下载编译好的 WebAssembly 文件。
然后,使用 wasmtime 来调用它。
echo '{"method":"NEXT","mode":"ENCRYPT","inputType":"TEXT","outputType":"TEXT","input":"测试","key":"ABRACADABRA","q":true,"r":50}' | wasmtime abracadabra-cn.wasm
本项目的 WebAssembly 模块使用 Javy 编译而来,方便在 C++、Rust、Go 等语言中调用,不推荐在类似 Python、 Java、Node.js 的解释器中调用。
要调用本 WebAssembly 模块,需要使用尚在预览状态的 WASI,目前仅有 wasmtime 提供了最完整的 WASI 支持,但它在各个语言的实现并不一致,具体请见 部署指南。
本项目有自动托管在Cloudflare Pages的静态页面可供直接使用。
如果你想自行快速部署这个静态页,可以在Release中下载快速部署文件包。若要自行编译或修改,请前往前端源代码仓库。
浏览器插件和油猴脚本的源码同样在前端源代码仓库,分别位于 crx 和 userscript 分支。
浏览器插件基于本项目的 JavaScript 实现。
已上架 Chrome WebStore, Edge 加载项 和 Firefox 扩展。
如果不方便访问Chrome插件商店,也可以访问Edge插件商店,和Firefox扩展商店。
提示:Edge 插件商店的上架审核速度十分缓慢,因此更新速度也更慢。不推荐从Edge商店下载本插件。
油猴脚本基于本项目的 JavaScript 实现,已上传到 Greasy Fork 网站。
油猴脚本在部分网站页面中提供一个小型悬浮窗,助你快速调用本项目的核心功能。
点击加密/解密,将自动复制结果到剪切板。
目前支持:百度贴吧、Bilibili
Abracadabra 还在积极开发中,这里是一些注意事项。
加密选择的标志位尽可能地排除了日常情况下出现碰撞的可能。
但有些极其特殊的时候,例如你正在尝试加密日语和中文夹杂的文本/文件,此时有可能出现污染现象。
如果出现污染现象,程序会立刻抛出错误并退出。
你可以选择强制加密来解决此问题。
请查阅 细节和使用指南 了解更多
明文 -> 压缩 -> AES-256-CTR -> Base64 -> 三重转轮 / 映射汉字 / 组句(仅仿真加密)-> 密文
密文 -> 解仿真(仅仿真加密) -> 转轮逆映射 -> Base64 -> AES-256-CTR 解密 -> 解压缩 -> 明文
Abracadabra 以最常用的 3000 个汉字为密本,对大小写拉丁字母,阿拉伯数字和部分符号进行映射。
密表为纯人工编纂,剔除了可能随机组成敏感词的汉字,不含任何贬义字。
映射表公开可查,查阅 映射表(传统) 或者 映射表(仿真) 以了解密本的全貌。
核心安全性由久经考验的 AES 加密算法提供,采用无填充的AES-256-CTR,节省密文长度。
AES 加密密钥和转轮密钥是同一个,均采用哈希值。
模拟古老的转轮,每次加密均会对密本映射进行偏移。
简言之,程序会将给定的密钥进行 SHA256,得到一个长度为 32 的 Uint8_t 数组。
这个数组中的每个数字,都会决定三重转轮中每个转轮每次迭代的转动方向和转动距离。
数字/符号,字母分别拥有一套转轮,即总共六个转轮,改变密钥相当于更换一套完全不同的转轮。
转轮显著增加了 Base64 密文的安全性,查阅 Issue#30 来了解转轮的详细运行机制。
在映射为汉字的时候,每个字母/数字/符号均有多种可能性,完全随机选择。
这进一步降低了密文的规律性,让关键词分词识别难以奏效。
特性 | Abracadabra | 与熊论道 | 佛曰 | 兽音 | Whisperer |
---|---|---|---|---|---|
开源 | ✅ | ❌ | ❌ | ✅ | ✅ |
易用 | ✅ | ✅ | ✅ | ✅ | ✅ |
加密 | ✅ | ❌ | ✅ | ❌ | ❌ |
仿真伪装 | ✅ | ❌ | ❌ | ❌ | ❌ |
本地运行 | ✅ | ❌ | ✅ | ✅ | ✅ |
短密文 | ✅ | 🟡 | ❌ | ❌ | ✅ |
随机性 | ✅ | ❌ | ✅ | ❌ | 🟡 |
抗识别 | ✅ | ❌ | ❌ | ❌ | ✅ |
自判断 | ✅ | ❌ | ❌ | ❌ | ❌ |
自校验 | ✅ | ❌ | ✅ | ❌ | ❌ |
易部署 | ✅ | ❌ | ❌ | ✅ | 🟡 |
明文:Abracadabra
魔曰(仿真):铃有将报,局有竟然。故探盈声者,当度青莺之静云。非木也,琴与树换,振棋以至雁。
魔曰(传统):困句夏之全玚凪斋或骏琅咨兆咩谜理金说宙银歌舒
熊曰:呋食性類啽家現出爾常肉嘿達嗷很
佛曰:諸南隸僧南降南吽諸陀南摩隸南僧南缽南薩咤南心彌嚴迦聞婆吽願南眾南色南兜南眾南如婆如南
社会主义:自由民主公正文明法治文明公正民主公正和谐公正民主公正自由公正民主公正文明法治文明公正民主
兽音:~呜嗷嗷嗷嗷呜呜啊呜嗷呜嗷呜呜~嗷啊呜啊嗷啊呜嗷呜~呜~嗷~呜呜嗷嗷嗷嗷嗷嗷呜啊嗷呜啊呜嗷呜呜~嗷啊嗷啊嗷啊呜嗷嗷~~~嗷~呜呜嗷嗷嗷嗷嗷嗷呜啊嗷呜呜呜嗷呜呜~呜啊呜啊嗷啊呜嗷嗷~嗷啊
火星文:(不支持英文)
感谢 Unishox2 提供高效的短文本压缩方案。
感谢贡献 PR 和参与测试的所有人。