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

如何逆转8位左循环移位rotatel函数,实现对应加密逻辑的解密功能

解密逻辑实现指导

思路验证

你的推导方向完全正确,加密过程的每一步都是线性可逆的,只需要按加密顺序反向操作即可,核心就是实现左循环移位的逆运算。

左循环移位的逆运算实现

对于8位数值的左循环移位bit位操作,其逆操作为右循环移位bit位,也等价于左循环移位8-bit位,两种写法效果完全一致。

逆运算函数实现如下:

def reverse_rotatel(x, bit):
    # 8位右循环移位bit位,完全抵消rotatel的左移效果
    return ((x >> bit) & 0xff) | ((x << (8 - bit)) & 0xff)

你可以用以下逻辑验证正确性:

# 原移位函数
def rotatel(x, bit):
    return ((x << bit) & 0xff) | (x >> (8 - bit))

origin = ord('A') # 65
encrypted_val = rotatel(origin, 6) # 按示例bit=6计算得到80
decrypted_val = reverse_rotatel(encrypted_val, 6) # 计算后回到65,和原始值一致

完整解密流程

加密的单字节运算顺序:明文 → 左循环移bit位 → 异或kxor对应元素 → 密文
解密需要按反向顺序执行操作:

  1. 取密文字节,先异或对应位置的kxor元素(异或操作本身可逆,再次异或同一值即可还原上一步结果)
  2. 把上一步得到的结果传入逆移位函数,得到明文字节

完整解密代码示例:

# 替换为你实际获取到的移位位数、密钥数组、密文字节流
bit = 6
kxor = [65,115,113,107,98,75,85]
encrypted_bytes = b'xxx' 

def reverse_rotatel(x, bit):
    return ((x >> bit) & 0xff) | ((x << (8 - bit)) & 0xff)

plaintext = []
for i in range(len(encrypted_bytes)):
    # 第一步:异或还原移位后的结果
    shifted_val = encrypted_bytes[i] ^ kxor[i % len(kxor)]
    # 第二步:逆移位得到明文字节
    plain_char = reverse_rotatel(shifted_val, bit)
    plaintext.append(chr(plain_char))

print("解密结果:", ''.join(plaintext))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:18:03