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


























