兽音译者编码实现

兽音译者编码实现

偶然看到有hero分享资源使用了这个加密,看了一下并不是太难于是学习了一下。这个加密逻辑是基于一个自定义的字符集(beast = ['嗷', '呜', '啊', '~'])对输入字符串进行编码,将每个字符的 Unicode 值转换为十六进制后,再把每个字符通过(字符+偏移值)÷4的到商和模映射到beast 中的字符组合。

这里有在线解码的网站:兽音译者_在线兽语翻译转换解码器

加密步骤

  1. 字符串转十六进制

    • 使用 str2hex 函数将输入字符串的每个字符转换为固定长度的 4 位十六进制表示。(所以超出 U+FFFF 的字符,需要5位以上,因此会导致信息丢失)
  2. (核心)十六进制字符映射到 beast

    • 遍历十六进制字符数组,计算每个字符的偏移值 k,公式为:k = (int(x, 16) + n) % 16
    • 根据 k 的值,将其分解为两个索引:k // 4k % 4,分别映射到 beast 中的字符。
    • 更新累加偏移值 n,使加密结果具有动态变化。
  3. 生成加密字符串

    • 将映射后的字符组合起来,形成最终的加密字符串。

示例

输入字符串 "你好"

  1. 转换为Unicode: 20320 22909

  2. 转换为十六进制:4f60 597d

  3. 循环计算索引: 比如第二位f, k=(15+1)%16=0

  4. 映射到beast: beast[0//4]='嗷', beast[0%4]='嗷'

  5. 加密后结果: beast[3]beast[1]beast[0]+呜嗷嗷嗷啊嗷嗷~啊呜~啊~呜呜嗷 + beast[2]

    得到~呜嗷呜嗷嗷嗷啊嗷嗷~啊呜~啊~呜呜嗷啊

最终加密后的数据长度是原始明文长度的 8 倍。

  1. 字符串转十六进制:每个字符的 Unicode 值被转换为 4 位十六进制字符串,数据长度变为原来的 4 倍。
  2. 十六进制字符映射到 beast:每个十六进制字符被映射为 2 个字符,数据长度再次翻倍

源代码

使用方法:实例化一个BeastVoice对象,调用encode()和decode()即可

class BeastVoice:
    def __init__(self, beast=None):
        self.beast = beast or ['嗷', '呜', '啊', '~']

    def set_beast(self, beast: list):
        if len(beast) == 4:
            self.beast = beast
            return True
        return False

    def str2hex(self, text: str) -> str:
        ret = ""
        for x in text:
            charHexStr = f"{ord(x):04x}"
            ret += charHexStr
        return ret

    def hex2str(self, text: str) -> str:
        ret = ""
        for i in range(0, len(text), 4):
            unicodeHexStr = text[i:i + 4]
            charStr = chr(int(unicodeHexStr, 16))
            ret += charStr
        return ret

    def encode(self, text: str) -> str:
        code = ""
        n = 0
        for char in self.str2hex(text):
            k = (int(char, 16) + n) % 16
            code += self.beast[k // 4] + self.beast[k % 4]
            n += 1
        return self.beast[3] + self.beast[1] + self.beast[0] + code + self.beast[2]

    def decode(self, text: str) -> str:
        if not (text.startswith(self.beast[3] + self.beast[1] + self.beast[0]) and text.endswith(self.beast[2])):
            return "Incorrect format!"

        text = text[3:-1]  # 去掉头尾标识符
        code = ""
        n = 0
        for i in range(0, len(text), 2):
            pos1 = self.beast.index(text[i])
            pos2 = self.beast.index(text[i + 1])
            k = (pos1 * 4 + pos2 - n) % 16
            code += f"{k:x}"
            n += 1
        return self.hex2str(code)

if __name__ == '__main__':
    beast_voice = BeastVoice()
    beast_voice.set_beast(['嗷', '呜', '啊', '~'])  # 自定义字符集

    while True:
        choice = input("选择操作: 1.加密 2.解密 3.退出\n")
        if choice == '1':
            text = input("输入要加密的文本: ")
            print("加密结果:", beast_voice.encode(text))
        elif choice == '2':
            text = input("输入要解密的文本: ")
            print("解密结果:", beast_voice.decode(text))
        elif choice == '3':
            break
        else:
            print("无效选择,请重新输入!")

一些python自带的函数:

# 返回单个字符的 Unicode 编码值。int类型
ord('你') #20320
# 将整数转换为以 0x 开头的十六进制字符串。
hex(255) # '0xff'
# x:要转换的值(字符串)。
# base:进制数(默认十进制,仅适用于字符串转换)。
# 自动识别进制(base=0)
int("0xff", base=16) # 255
# `0`:指定用零(`0`)填充。
# `4`:总宽度为 4 位。
# `x`:小写十六进制格式。
f"{20320:04x}" # 4f60

参考

【分享】兽音译者 Python实现 – 吾爱破解 – 52pojie.cn

6DDUU6/beast_python

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇