兽语看起来神秘,规则其实很朴素:把文字变成一串数字,再把这串数字换成四个字符。没有随机数,没有密钥,也没有服务器参与。只要输入相同、字符组相同,结果就完全相同。
01. 第一步:把文字变成 UTF-16BE 十六进制
计算机里的文字都有编号。兽语使用 UTF-16 的编码单元,把每个单元写成 4 位十六进制。以「你」为例,它的码位是 U+4F60,写成小写就是 4f60。两个字「你好」就是 4f60 597d,中间的空格只是为了方便阅读,实际计算时会连在一起。
为什么是 4 位?因为一个 UTF-16 编码单元是 16 位二进制,正好对应 4 位十六进制。中文字、英文字母、数字、标点都按这个规则处理。Emoji 通常占两个编码单元(代理对),所以会变成 8 位十六进制,密文也会更长。
02. 第二步:给每一位加上位置偏移
接下来,从左到右给每个十六进制位编号,从 0 开始。第 i 位的数值 v 会被替换成 (v + i) mod 16。这里的 mod 16 是取余数,保证结果仍然落在 0–15 之间。
以「你」的 4f60 为例:
- 第 0 位是
4,(4 + 0) mod 16 = 4,仍是 4; - 第 1 位是
f(即 15),(15 + 1) mod 16 = 0,变成 0; - 第 2 位是
6,(6 + 2) mod 16 = 8,变成 8; - 第 3 位是
0,(0 + 3) mod 16 = 3,变成 3。
所以 4f60 变成了 4083。「你好」的 4f60 597d 则变成 4083 9ed4。偏移的编号是整串连续的,不会在每个字之后归零;这一点很关键,它让相同字符在不同位置产生不同结果,也让插入或删除一个字符会影响后面的全部内容。
03. 第三步:十六进制变成四进制
一个十六进制位可以表示 0–15,共 16 种值。一个四进制位只能表示 0–3,共 4 种值。要把 16 种状态装进 4 个符号,就需要两位四进制:第一位表示「有几个 4」,第二位表示「余数」。
换算方法是:v = 4 × 高位 + 低位,也就是 高位 = floor(v / 4),低位 = v mod 4。例如:
4→10(1×4 + 0)0→008→20(2×4 + 0)3→03f(15)→33(3×4 + 3)
于是 4083 变成 10002003,「你好」的 4083 9ed4 变成 10002003 21323110。到这里,所有数字都只剩 0、1、2、3 四种,已经可以交给四个字符了。
04. 第四步:加上包装,映射到四个字符
兽语会在数字串前面加上 310,后面加上 2。这三个前缀数字和一个后缀数字本身也都是 0–3,因此可以和正文一起映射。包装的作用是让解码器快速判断「这串东西像不像一段兽语」,同时给正文一个明确的起点和终点。它不是校验和,不能证明内容没有被修改。
最后,把四个字符按顺序当作 0、1、2、3。默认字符组是「嗷、呜、啊、~」,映射关系就是:
0 → 嗷
1 → 呜
2 → 啊
3 → ~
把「你好」的包装结果 31010002003213231102 逐位替换,就得到:
~呜嗷呜嗷嗷嗷啊嗷嗷~啊呜~啊~呜呜嗷啊
你可以打开在线兽语翻译器,输入「你好」核对一遍。结果应该完全一致。
05. 完整例子:从「你好」到 20 个字符
把上面的步骤合在一起,就是下面这张表。每一步都可以单独验证,任何一步不同,最终密文都会不同。
| 步骤 | 结果 |
|---|---|
| 原文 | 你好 |
| UTF-16BE | 4f60 597d |
| 位置偏移 | 4083 9ed4 |
| 四进制 | 10002003 21323110 |
| 包装 | 31010002003213231102 |
| 默认字符 | ~呜嗷呜嗷嗷嗷啊嗷嗷~啊呜~啊~呜呜嗷啊 |
注意长度:两个汉字产生 16 个正文数字,加上 4 个包装数字,一共 20 个字符。一个汉字的密文通常是 12 个字符。这个比例可以帮助你预估聊天框里会不会被折叠。
06. 解码:把上面的步骤倒过来
解码不是「猜」,而是严格的反向计算。程序会做这几件事:
- 识别字符:从左到右匹配四个字符,把每个字符换回 0–3。空格、换行等不属于字符组的符号会被跳过,所以复制时混入换行通常不影响结果。
- 检查包装:确认数字串至少 4 位、以
310开头、以2结尾。不满足就提示格式不合法。 - 去掉包装:取中间部分,确认长度是偶数。奇数说明有字符丢失或混入。
- 四进制转十六进制:每两位四进制合成一个 0–15 的十六进制位。
- 反向偏移:第
i位计算(v - i) mod 16,把偏移减回去。 - 还原文字:每 4 位十六进制组成一个 UTF-16 编码单元,再拼回字符串。
解码器不需要知道原文,也不需要字典。它只依赖字符组和上面这套固定顺序。这就是为什么只要规则一致,哪怕换一台设备、换一个浏览器,结果也能对上。
07. 自定义字符改变了什么,没改变什么
四个字符只是数字 0–3 的「外套」。把「嗷呜啊~」换成「喵呜咪~」,数字串本身完全不变,变的只是最后一步的映射。因此:
- 改变了:密文的外观、开头和结尾的可见字符、输入时的按键习惯。
- 没改变:编码长度、可逆性、抗分析能力,以及「知道规则就能解开」这件事。
自定义时要注意三件事。第一,四个字符必须互不相同;第二,顺序就是映射,不能随意调换;第三,避免一个字符是另一个字符的前缀,例如同时使用「喵」和「喵喵」,解码时的贪婪匹配可能提前截断。Emoji 和多码点组合字符也可以用,但不同设备的显示可能有差异。
08. 兼容性与能力边界
本站默认规则与常见的「兽音译者」保持一致:UTF-16BE 十六进制、全局位置偏移、四进制、310…2 包装、默认字符「嗷呜啊~」。在这个前提下,同一句话通常能得到相同结果。但兽语没有统一标准,其他工具可能改动包装、偏移或字符顺序,所以跨工具使用时,先拿一句短话对照。
还有几个实际限制:
- 没有纠错:少一个字符就可能导致整串错位,无法自动恢复。
- 没有分块:长文本是一整串,不适合边传边解。
- 依赖字符完整:聊天软件如果替换了「~」或截断长消息,解码就会失败。
- 不是加密:没有密钥、随机数和完整性校验,不能保护敏感信息。
09. 为什么它不是加密
加密的目标是:即使攻击者拿到密文、知道算法,没有密钥也读不出明文。兽语不满足这个条件。它的算法是公开的,字符组通常也会告诉对方;即使你把字符组当作秘密,它也只有很小的搜索空间,而且已知明文和频率分析都能帮助推断。
更准确地说,兽语是一种可逆编码,附带一点轻度混淆。它能让文字在视觉上不像原文,能挡住不经意的旁观,但不能挡住有动机的人。把它用在群聊玩笑、活动解谜、内容彩蛋里很合适;用在密码、证件号、合同和商业机密上,就是用错了工具。
如果你需要真正的保密,应该使用经过验证的加密工具和安全的密钥管理方式。那是一个完全不同的问题,不是换四个更复杂的字符就能解决的。
10. 接下来读什么
如果你想亲手验证这套流程,打开在线翻译器,展开「查看编码 / 解码过程」,输入「你好」对照上面的表。如果你想看更完整的概念区分,读兽语算加密吗;如果你准备把它用在群聊里,先看使用教程里的边界提醒。