You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中逆向还原经移位拼接生成的字符(magic2函数)

逆向解码magic2函数的输出,还原原始输入单词

要逆向这个magic2函数的输出,我们得先搞清楚它的正向逻辑,再反推每一步的操作。

先拆解正向逻辑

magic2的核心操作是对每个输入字符,把当前结果左移8位(等价于乘以256)后,加上字符的Unicode编码值。这相当于把每个字符的编码依次拼接到结果的低8位,前面的字符会被逐步推到高位。比如输入saman的过程:

  • 第一个字符s(ord=115):res = 0 <<8 +115 =115
  • 第二个字符a(ord=97):res=115<<8 +97=115*256+97=29537
  • 后续步骤以此类推,最终把所有字符的编码按顺序拼成了一个大整数。

逆向解码的核心思路

既然正向是把字符编码从高位到低位依次拼接,那逆向就要从低位到高位逐个取出字符编码,再反转顺序得到原始输入:

  1. 提取低8位:用num & 0xFF获取当前结果的最后8位,这就是最后一个被处理的字符的Unicode编码,转成字符。
  2. 移除已处理的低8位:把结果右移8位(等价于除以256取整),回到上一步的结果状态。
  3. 重复操作:直到结果变为0,此时所有字符都已取出。
  4. 反转顺序:因为我们是从最后一个字符开始取的,所以反转列表就能得到原始输入的顺序。

实现逆向解码的代码

这里用Python写一个逆向函数:

def reverse_magic2(num):
    chars = []
    while num > 0:
        # 提取低8位对应的字符
        char_code = num & 0xFF
        chars.append(chr(char_code))
        # 右移8位,去掉已处理的低8位
        num = num >> 8
    # 反转得到原始输入顺序
    return ''.join(reversed(chars))

验证示例

用你给出的最终结果495555797358测试:

print(reverse_magic2(495555797358))  # 输出: saman

完全符合预期!

内容的提问来源于stack exchange,提问作者Saman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:15:33