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