Cómo cifrar una imagen en Python

Echa un vistazo a estos desde stackoverflow:

¿Cómo cifro / descifro un archivo binario de longitud arbitraria usando Python?

cifrar datos binarios en binarios y también descifrar

y este breve tutorial sobre el cifrado PyCrypto AES de archivos en Python con PyCrypto.

EDITAR:

código

import os, random
de Crypto.Cipher import AES
de Crypto.Hash import SHA256

cifrado def (clave, nombre de archivo):
chunk_size = 64 * 1024
output_file = filename + “. enc”
file_size = str (os.path.getsize (nombre de archivo)). zfill (16)
IV = ”
para i en rango (16):
IV + = chr (random.randint (0, 0xFF))
encryptor = AES.new (clave, AES.MODE_CBC, IV)
con abierto (nombre de archivo, ‘rb’) como archivo de entrada:
con open (output_file, ‘wb’) como outf:
outf.write (tamaño_archivo)
escritura externa (IV)
mientras cierto:
fragmento = inputfile.read (tamaño de fragmento)
si len (fragmento) == 0:
descanso
elif len (fragmento)% 16! = 0:
fragmento + = ” * (16 – len (fragmento)% 16)
outf.write (encryptor.encrypt (fragmento))

descifrar def (clave, nombre de archivo):
chunk_size = 64 * 1024
archivo_salida = nombre de archivo [: – 4]
con abierto (nombre de archivo, ‘rb’) como inf:
tamaño de archivo = largo (inf.read (16))
IV = inf.read (16)
descifrador = AES.new (clave, AES.MODE_CBC, IV)
con open (output_file, ‘wb’) como outf:
mientras cierto:
fragmento = inf.read (tamaño de fragmento)
si len (fragmento) == 0:
descanso
outf.write (decryptor.decrypt (fragmento))
outf.truncate (tamaño de archivo)

def getKey (contraseña):
hasher = SHA256.new (contraseña)
return hasher.digest ()

def main ():
choice = raw_input (“Seleccione uno de los siguientes \ n> 1. Cifrar \ n> 2. Descifrar \ n >>>”)
si la opción == “1”:
filename = raw_input (“Ingrese el nombre del archivo a cifrar >>”)
password = raw_input (“Ingrese la contraseña”)
cifrar (getKey (contraseña), nombre de archivo)
imprima “Listo! \ n% s ==>% s”% (nombre de archivo, nombre de archivo + “. enc”)
Elección elif == “2”:
filename = raw_input (“Archivo a descifrar>”)
contraseña = raw_input (“Contraseña:”)
descifrar (getKey (contraseña), nombre de archivo)
imprima “Hecho \ n% s ==>% s”% (nombre de archivo, nombre de archivo [: – 4])
más:
imprime “Sin opción seleccionada”

if __name__ == “__main__”:
principal()

EDITAR 2:

Ejecución del programa en una imagen.

Entonces,

No se puede abrir el archivo encriptado.

Archivo original eliminado.

Lo tengo de vuelta.