Error 'IV not meaningful' while encrypting an Image using ECB, CBC and CFB modes in python

303 views Asked by At

Please i'm trying to encrypt an image using the ECB, CBC and CFB modes. when I try to execute the program, i get the error "TypeError: IV is not meaningful for the ECB mode". Here is my code: I will really appreciate any help as am new to python. Thanks so much

from PIL import Image
#from PIL.Image import core as image
import os
import sys
from Crypto.Cipher import AES

Block_size=16
IV_size=16
def encrypt_file(input_file,output_file,cipher_mode):
          input_img=Image.open(input_file)
          key="770A8A65DA156D24EE2A093277530142"
          if cipher_mode=='ECB':
               mode=AES.MODE_ECB
          elif cipher_mode=='CBC':
               mode=AES.MODE_CBC
          else:
              mode=AES.MODE_CFB
          i=os.urandom(IV_size)
          aes=AES.new(key,mode,i)
          img_str=input_img.tostring()
          #Pad the image string to the input block size
          img_pad_lenght=Block_size-len(img_str)/Block_size

          img_str+=img_pad_lenght*"~"
          #generate the encrypted image string
          encrypted_img_str=aes.encrypt(img_str)

          #create an image from the encrypted string
          encrypted_img=Image.frombuffer('RGB',input_img.size, encrypted_img_str,'raw','RGB',0,1)
          #create and save the output image
          encrypted_img.save(output_file,'PNG')
          print("Encrypted using AES in " + cipher_mode + " mode and saved to \"" + output_file")

encrypt_file('Linux-icon.png','output_file.png','ECB')

0

There are 0 answers