解密问题

问题描述 投票:0回答:1

输入图像是分解为 64 像素块的灰度图像。加密函数采用 64 像素(512 位)作为 input_value 和 64 位密钥。我们将 input_value 分割为 8 个像素值的块。我们对一组 8 个像素进行 16 轮加密。每个其他函数都会进行一些计算并以类似的格式返回值。

当 for 循环中未使用 xor_8_pixels 函数时,加密和解密的代码都能正确执行。添加 xor_8_pixels 函数时,解密没有返回原始输入图像。(很可能我没有在解密中正确定位 xor 函数)

def encryption(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)
    # print(input_blocks)
    for i in range(16): #16 rounds
        for j in range(8):
            if j < 7:
                input_blocks[j] = xor_8_pixels(input_blocks[j], input_blocks[j - 1])
            input_blocks[j]=OwnFunctionEncrypt(input_blocks[j], keyList[i][j])
            
        if i < 15:
            input_blocks = left_shift(input_blocks)
        # print(input_blocks)
    for i in range(8):
        for j in range(8):
            result.append(input_blocks[i][j])
    return result

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)
    # print(input_blocks)
    for i in range(16): # 16 rounds
        for j in range(8):
          if j < 7:
            input_blocks[j + 1] = xor_8_pixels(input_blocks[j], input_blocks[j + 1])
          input_blocks[j] = OwnFunctionDecrypt(input_blocks[j], keyList[15 - i][j])  # Decrypt
              # XOR with the next block
        if i < 15:
            input_blocks = right_shift(input_blocks) 
        # print(input_blocks)
    for i in range(8):
        for j in range(8):
            result.append(input_blocks[i][j])
    return result
python for-loop encryption cryptography pixel
1个回答
0
投票

即使没有看到您的代码,您也可能将其中一个异或放在错误的位置。您想在“CBC 模式”中进行加密。

  • 在加密中,您采用最新的输出块并进行异或 加密之前的下一个输入块

  • 在解密中,您采用最近的密文并对其进行异或 与当前解密的结果。

请注意,这些不是对称的。维基百科页面上的图片应该会更清楚。

© www.soinside.com 2019 - 2024. All rights reserved.