请根据以下代码,将被加密的图片解密出来from PIL import Image from Crypto.Util.number import * from random import shuffle, randint, getrandbits flagImg = Image.open('flag.png') width = flagImg.width height = flagImg.height def makeSourceImg(): colors = long_to_bytes(getrandbits(width * height * 24))[::-1] img = Image.new('RGB', (width, height)) x = 0 for i in range(height): for j in range(width): img.putpixel((j, i), (colors[x], colors[x + 1], colors[x + 2])) x += 3 return img def xorImg(keyImg, sourceImg): img = Image.new('RGB', (width, height)) for i in range(height): for j in range(width): p1, p2 = keyImg.getpixel((j, i)), sourceImg.getpixel((j, i)) img.putpixel((j, i), tuple([(p1[k] ^ p2[k]) for k in range(3)])) return img """ source文件夹下面的图片生成过程: def makeImg(): colors = list(long_to_bytes(getrandbits(width * height * 23)).zfill(width * height * 24)) shuffle(colors) colors = bytes(colors) img = Image.new('RGB', (width, height)) x = 0 for i in range(height): for j in range(width): img.putpixel((j, i), (colors[x], colors[x + 1], colors[x + 2])) x += 3 return img for i in range(15): im = makeImg() im.save(f"./source/picture{i}.png") """ n1 = makeSourceImg() n2 = makeSourceImg() n3 = makeSourceImg() nonce = [n1, n2, n3] index = list(range(16)) shuffle(index) e=0 """ 这里flag.png已经提前被保存在source文件夹下了,文件名也是picture{xx}.png """ for i in index: im = Image.open(f"source/picture{i}.png") key = nonce[randint(0, 2)] encImg = xorImg(key, im) encImg.save(f'pics/enc{e}.png') e+=1
时间: 2024-04-14 16:31:44 浏览: 105
根据给定的代码,首先是定义了一个函数`makeSourceImg()`,它会生成一个与`flag.png`相同大小的图片。该函数会随机生成一串颜色值,并按顺序填充到新的图片中。
接下来是定义了一个函数`xorImg(keyImg, sourceImg)`,它会对两张图片进行异或操作,生成一个新的图片。具体操作是对每个像素点的RGB值进行异或运算。
然后是生成了三张随机的源图片`n1`、`n2`、`n3`。这些源图片将用于与后续的加密图片进行异或操作。
接下来的部分是一个循环,循环16次。在每次循环中,从`source`文件夹中读取一张图片,并从三张随机的源图片中选择一张进行异或操作。最后将结果保存到`pics`文件夹中。
根据代码逻辑,可以通过逆向操作,将加密图片解密出来。根据代码所示,解密过程为将加密图片与对应的源图片进行异或操作,得到原始图片。
相关问题
from PIL import Image和from openpyxl.drawing.image import Image会重复吗
不会重复。
from PIL import Image是导入Python Imaging Library(PIL)中的Image模块,用于打开、创建、保存图像文件等操作。
而from openpyxl.drawing.image import Image是导入openpyxl库中的Image类,用于在Excel工作表中插入图像。
二者虽然都涉及到图像处理,但是是不同的库和模块,不会重复。
from PIL import Image和from openpyxl.drawing.image import Image会重复吗在使用时会重复吗
不会重复。
from PIL import Image和from openpyxl.drawing.image import Image是从两个不同的库中导入Image类。虽然它们的名称相同,但它们在不同的命名空间中。因此,它们不会发生冲突或重复。
您可以同时导入它们,使用它们来处理图像并将其插入Excel文件中,而不会出现任何问题。
阅读全文