两次按位差分执行之间的执行时间差

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

当我尝试对一个数字与另一个随机数字进行对称加密(按位异或执行)时,我发现了一个有趣的现象。加密和解密的执行时间不同,相差可能是4到6倍(加密周期:1.2秒,解密周期:0.2秒)。加密执行比解密花费更多时间。我很困惑为什么会造成这种差异。我已附上下面的代码。

# Encryption Execution
start_time = time.time()
encrypted_figure = differential_fig(origin_img, input_random_img, 1)
end_time = time.time()
# Decryption Execution
start_time = time.time()
decrypted_figure = differential_fig(encrypted_figure, input_random_img, 0)
end_time = time.time()
# Called Function 
def element_xor(first_array, second_array):
    array_size = first_array.size
    output_array = np.zeros(array_size, dtype=np.int32)
    for e in range(array_size):
        output_array[e] = first_array[e] ^ second_array[e]
    return output_array

def sliding_window_differential(raw_array, random_array, raw_size, random_size, flag):
    indexes_list = []
    times = range(math.floor(raw_size / random_size))
    num_remain_elements = raw_size % random_size
    for j in times:
        start_index = j * random_size + num_remain_elements
        end_index = start_index + random_size
        indexes_list.append([start_index, end_index])
    iterative_index = [[0, random_size]] + indexes_list
    if not flag: # flag 1: encrypt, 0: decrypt
        iterative_index.reverse()
    for start_index, end_index in iterative_index:
        raw_array[start_index:end_index] = element_xor(raw_array[start_index:end_index],
                                                       random_array)
    return raw_array

def differential_fig(raw_img, random_img, encrypt_flag):
    o_h, o_w, o_c = raw_img.shape
    mid_img = random_img[0, :, :, :]
    output_figure = np.zeros((o_h, o_w, o_c), dtype=np.int32)
    for i in range(o_c):
        e_raw_img = raw_img[:, :, i].flatten()
        e_random_img = mid_img[:, :, i].flatten()
        origin_size = e_raw_img.size
        random_size = e_random_img.size
        if origin_size > random_size:
            e_raw_img = sliding_window_differential(e_raw_img, e_random_img, origin_size, 
                                                    random_size, encrypt_flag)
        else:
            e_random_img = e_random_img[:origin_size]
            e_raw_img = element_xor(e_raw_img, e_random_img)
        output_figure[:, :, i] = e_raw_img.reshape(o_h, o_w)
    return output_figure

有人能解释一下这个现象吗? 或者提出改进流程的建议。

python-3.x xor encryption-symmetric
1个回答
0
投票

list.reverse
方法创建给定列表的副本,其中项目按相反顺序排列,复制所需的时间与列表中项目的数量成正比。您可以使用
reverse
函数以相反的顺序生成项目,以避免进行复制。调用生成器仍然会有开销,但会比复制小得多。

改变:

iterative_index.reverse()

至:

iterative_index = reverse(iteratie_index)
© www.soinside.com 2019 - 2024. All rights reserved.