众所周知,这是我们早在高中生物必修二就学过的三种RNA——

RNA示意图

我们还知道的是,这种神奇的、能传递信息的物质,其传递信息的有效组成部分是——碱基!

等等,什么?传递信息?

用的什么?三碱基组合的密码子。

(鬼点子生成中…)

我有一计!

于是乎,在一顿酣畅淋漓的… vibe coding 下, HelixShieldCipher 横空出世!

这是?

基于 RNA 密码子的 ASCII 字符加密库,支持 Rust 核心库、CLI 工具和 Web 服务。

这个项目的GItHub地址是:HelixShieldCipher

功能特性

核心加密/解密

  • 字符集:支持 ASCII 字符
  • 密码子映射:每个 ASCII 字符映射到一个唯一的 3 碱基 RNA 密码子(仅含 A/U/C/G)
  • 种子驱动偏移:通过 u64 种子初始化 LCG 伪随机数生成器,对字符索引进行偏移后查表

加密流程

1
明文 → 字符查索引 → (索引 + 伪随机偏移) mod 54 → 查密码子表 → 密文(RNA 碱基序列)

解密过程反向进行:

1
密文 → 按3碱基分组 → 查反向表得 ASCII → (加密索引 - 伪随机偏移) mod 54 → 原字符

组件

组件 名称 说明
核心库 rna-cipher-core 零依赖 Rust 库,提供加密/解密/编解码
CLI 工具 rna-cipher-cli 命令行加密/解密/密码表导出
Web 服务 rna-cipher-web Axum + 前端界面

接口

接口 说明
Rust API encrypt(text, seed) / decrypt(cipher, seed)
C FFI rna_encrypt() / rna_decrypt()
Web API POST /api/encrypt / POST /api/decrypt

Rust API

1
2
3
4
5
6
7
// v1.00(已弃用但保留)
encrypt(plaintext: &str, seed: u64) -> Result<String>
decrypt(ciphertext: &str, seed: u64) -> Result<String>

// v1.01(新增)
encrypt_v2(plaintext: &str, password: &str, options: &CipherOptions) -> Result<String>
decrypt_v2(ciphertext: &str, password: &str, options: &CipherOptions) -> Result<String>

CLI

1
2
3
4
5
6
# v1.00
rna-cipher encrypt --seed 42 < plain.txt

# v1.01
rna-cipher encrypt --password "mypass" < plain.txt
rna-cipher encrypt --password "mypass" --methylation < plain.txt

Web API

1
2
3
4
5
6
7
8
9
10
{
"text": "Hello",
"password": "mypass",
"options": {
"prime5_obfuscate": false,
"pair_mode": false,
"template_strand": false,
"methylation": false
}
}

算法介绍

1. 基于口令的种子派生

种子 $X$ 完全由口令 $P$ 的 SHA256 哈希值派生:

$$X = \text{int}(\text{SHA256}(P)[8:16])$$

2. 类 Enigma 步进(步进值 $B$)

密码子表按照步进值 $B$ 动态偏移,每加密一个字符生成新的 $B$ 值:

$$B_i = \text{LCG}(\text{state}_i) \bmod 54$$

使得同一明文字符在不同位置映射到不同密码子,有效抵抗频率分析。

3. 配对方式偏移(偏移量 $Y$)

$H’$ 的取模结果产生配对方式偏移 $1 \sim 2$ 位:

$$Y = (H’ \bmod 2) + 1$$

4. 5’/3’ 端混淆

通过开关控制,启用后密文的 5’ 端起始点由口令派生,进一步增强混淆。

5. 模板链

开启后生成模板链(非直接信息链),解密时需还原为信息链。必须同时开启 5’/3’ 端混淆。

6. RNA 甲基化

甲基化的基因密码子在解密时自动跳过。甲基化位置由口令派生,不体现在密码子计数值差异中。

算法流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
输入:口令 P,明文 M(或密文 C)

H(P) = SHA256(P)

S₀ = int(H(P)[0:8]), S₁ = int(H(P)[8:16])
H₆₄ = S₀, X = S₁

H' = H₆₄ ⊕ X

state₀ = H'

对于每个字符 i ∈ [0, n):
state_{i+1} = state_i × 6364136223846793005 + 1442695040888963407 (mod 2⁶⁴)
B_i = state_{i+1} mod 54

加密:enc_idx_i = (idx_i + B_i) mod 54
解密:idx_i = (enc_idx_i - B_i + 54) mod 54

许可

GNU General Public License v3.0