为什么hexcode输出失败?

2024-06-26 17:04:55 发布

您现在位置:Python中文网/ 问答频道 /正文

from os import urandom
from PIL import Image
import io



for y in range((len(array2) -1), -1, -1):  
  decrypted_initial = decrypt(array2[y], key)
  if y > 0:
    decrypted_cipher = decrypt(decrypted_initial, array2[(y -1)])
  if y == 0:
    decrypted_cipher = decrypt(decrypted_initial, fixed_initialization_vector)
  immage_array.append(decrypted_cipher)
immage_array = [x for sets in immage_array for x in sets] #The list is all zeros since the image is all black.


for i in range(1000):
  print (immage_array[i]) #1000 zeroes printed.
if immage_array == myMessage: #Comparing the input hexocde for the encryption and output hexcode from the decryption.
    print("Yay.") #Print successful. 
image = Image.open(io.BytesIO(bytes(immage_array))) #Not sure what this does exactly. I am just trying to get the hexcode to output as an image file.
image.save(output.png)

我试图做链块密码的图像,这是代码的一部分。我已经能够得到一个图像的十六进制代码,加密它使用链块密码,并解密它。然后我将解密的十六进制代码与原始的输入十六进制代码进行比较,得到了一个成功的匹配。十六进制代码作为列表而不是字节数组返回,但是if语句仍然将它们识别为相等。我有麻烦的转换十六进制代码回到一个形象,虽然

我得到这个错误。OSError:无法识别图像文件<_io.BytesIO对象位于0x039F1090>

为了便于确认十六进制代码的完整性(我已经确认与输入相同),该图像是所有黑色像素,用于测试目的

是什么阻止我将十六进制代码转换回图像?我试着到处寻找有效的例子,但我始终无法完全理解为什么它有效。这是我的逻辑

Imageu数组是一个列表==(0,0,0,0,…,n)

bytes()#将包含所有整数0的immageŠ数组列表转换为包含x00的字节数组

io.BytesIO()由Image.open()函数操作字节数组所需的函数

然后将字节数组作为对象存储在变量映像中

save(output.png)save函数将文件名作为参数。使用图像对象

老实说,我已经尽了最大努力去找出逻辑的错误所在。如果您能解释一下如何将(0,0,0,…,n)列表转换成图像,我将不胜感激。是的,我知道,我见过其他的例子,它是在堆栈溢出。我想知道为什么我的执行失败了


Tags: the代码inio图像image列表for
1条回答
网友
1楼 · 发布于 2024-06-26 17:04:55

我只是重读了你的问题。如果您的immage\u数组是[0,0,0…],则无法执行此操作。那不是图像,而是位图(细微差别)。使用PIL.Image.frombytes构造函数

如果要加密图像,只需加密整个内容,而不是提取文件内容,将其转换为位图,然后加密/解密。首先,当你把它转换成位图时,它的数据量会增加一个数量级,其次你会丢失图像格式的信息(RGB、ARGB、单色等)

如您现在所揭示的,您正在使用PIL.Image.getdata方法。这将返回一个一维列表,那么如何知道另一端的宽度/高度呢?i、 e.如果您的图像是640x480,从另一端看,您无法判断它是480x640还是307200x1

相关问题 更多 >