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

加密解密算法异常:加入xor_8_pixels后解密无法还原原始图像

问题分析与修复方案

你的问题核心是解密流程中操作顺序、XOR处理逻辑完全不符合加密的逆过程,导致加入xor_8_pixels后无法还原原始图像。

加密流程的每轮操作逻辑

先明确加密单轮的执行顺序(以第i轮为例):

  1. 将64像素块拆分为8个8像素子块[B0, B1, ..., B7]
  2. 对j从0到6依次执行:
    • Bj = Bj XOR Bj-1(j=0时,Bj-1为B7)
  3. 对所有8个子块执行OwnFunctionEncrypt
  4. 若不是最后一轮,对块列表执行左移

解密的核心要求

解密必须严格执行加密的逆操作,顺序完全颠倒:

  • 加密是「XOR → 加密函数 → 左移」,解密则是「右移 → 解密函数 → 逆XOR」(对应前15轮)
  • 逆XOR需要倒序处理(从j=6到0),因为加密时后续块的XOR依赖前面已修改的块,解密时必须从最后修改的块开始还原,避免覆盖依赖值

修正后的解密函数

def decryption(input_value, key_value):
    keyList = create_key_list(key_value)
    result = []
    input_blocks = []
    for i in range(8):
        sub_block = (input_value[8*i:8*i+8])
        input_blocks.append(sub_block)
    
    for i in range(16):
        # 对应加密的第15-i轮密钥
        current_key = keyList[15 - i]
        
        # 第一步:先执行解密函数,还原加密前的XOR中间值
        for j in range(8):
            input_blocks[j] = OwnFunctionDecrypt(input_blocks[j], current_key[j])
        
        # 第二步:逆加密时的XOR操作,倒序处理j从6到0
        for j in range(6, -1, -1):
            if j == 0:
                # j=0时,加密用的是原始B7,逆操作再次XOR B7
                input_blocks[j] = xor_8_pixels(input_blocks[j], input_blocks[7])
            else:
                # 加密时Bj = Bj XOR Bj-1(已修改的),逆操作再次XOR Bj-1(解密后的中间值)
                input_blocks[j] = xor_8_pixels(input_blocks[j], input_blocks[j-1])
        
        # 第三步:对应加密的左移,执行右移(最后一轮解密不需要)
        if i < 15:
            input_blocks = right_shift(input_blocks) 
    
    # 拼接结果
    for i in range(8):
        for j in range(8):
            result.append(input_blocks[i][j])
    return result

关键修复点说明

  1. 操作顺序修正:先执行OwnFunctionDecrypt再处理逆XOR,确保解密函数作用在加密后的原始值上,还原出加密时的XOR中间值。
  2. XOR处理顺序修正:从j=6到0倒序处理,避免还原前面的块时覆盖后面块需要依赖的中间值。
  3. XOR操作对象修正:直接修改input_blocks[j](和加密逻辑一致),通过再次XOR实现逆操作(XOR是自逆运算,两次XOR可还原原始值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:34:58