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