code
letter
url
The content of each one are: a letter, an url and the code of my program.
code:
from sys import argv from PIL import Image def openFile(fileName): f = open(fileName, 'r') mensaje = list() for line in f: mensaje.append(line) f.close() return "".join(mensaje) def setMsn(mensaje): m2 = list() mensaje = list(mensaje) for i in mensaje: u = bin(ord(i))[2:].zfill(8) for j in u: m2.append(j) return m2 def getMsn(mensaje): m2 = list() a = 1 b = '' for i in mensaje: b = b+i if(a%8 == 0): m2.append(chr(int(b,2))) b = '' a = a + 1 return "".join(m2) def pixelF(m2, v, count): if(v[7:8] != m2[count]): v = v[:7]+m2[count] else: v = v return int(v, 2) def openImage(fileName, m2): im = Image.open(fileName) rgb = im.convert('RGB') c = 0 while c != len(m2)-1: for i in range(0, im.size[0], 3): for j in range(im.size[1]): b = rgb.getpixel((i, j))[2] v = bin(b)[2:].zfill(8) w = pixelF(m2, v, c) r = rgb.getpixel((i, j))[0] g = rgb.getpixel((i, j))[1] d = tuple([r,g,w]) im.putpixel((i,j),d) if(c == len(m2)-1): break c = c+1 im.save(str(2)+fileName, "PNG") def decodeM(fileName): im = Image.open(fileName) rgb = im.convert('RGB') arrayRGB = list() for i in range(0, im.size[0], 3): for j in range(im.size[1]): b = rgb.getpixel((i, j))[2] v = bin(b)[2:].zfill(8) arrayRGB.append(v[7:8]) return arrayRGB def main(): mensaje = openFile(argv[1]) mensaje = setMsn(mensaje) imagen = argv[2] print imagen w = openImage(imagen, mensaje) m2 = decodeM(str(2)+imagen) print getMsn(m2) main()
The code take 2 parameters, the name of the file that contains the information and the name of the image to save.
> criptoImage.py fileInformation.txt image.png > dInformation.txt
To decrypt we can use the next code:
from sys import argv from PIL import Image def getMsn(mensaje): m2 = list() a = 1 b = '' for i in mensaje: b = b+i if(a%8 == 0): m2.append(chr(int(b,2))) b = '' a = a + 1 return "".join(m2) def decodeM(fileName): im = Image.open(fileName) rgb = im.convert('RGB') arrayRGB = list() for i in range(0, im.size[0], 3): for j in range(im.size[1]): b = rgb.getpixel((i, j))[2] v = bin(b)[2:].zfill(8) arrayRGB.append(v[7:8]) return arrayRGB def main(): m2 = decodeM(str(1)+imagen) print getMsn(m2) main()
This code only takes the name of the image
Tu programa no se puede usar para decifrar tus imágenes desde el png tal cual, ya que siempre pide que pase el mensaje también. Tampoco documenta cómo uno debería usarlo cuando lo corro. Van 9 puntos.
ResponderEliminarCorregido
ResponderEliminar