Un script python de esteganografía
Con este simple script fue con el que oculte la imagen en la entrada anterior. (simplemente le cambio la paridad al ultimo parametro del color RGB.) Este script es solo para tener una idea de lo que es la esteganografía y para mostrar una simple implementacion. Espero que les guste.
#!/usr/bin/env python
# Archivo: fusion.py
import Image
import sys
def fusionar(arch1,arch2):
try:
imagen =Image.open(arch1)
msg =Image.open(arch2)
xsize,ysize = imagen.size
xsizeMsg,ysizeMsg = msg.size
if (xsizeMsg,ysizeMsg) != (xsize,ysize):
return -1 # imagenes de distinta dimencion
for y in range(ysize):
for x in range(xsize):
pixelImg = imagen.getpixel((x,y))
pixelMsg = msg.getpixel((x,y))
promRGB = (pixelMsg[0]+pixelMsg[0]+pixelMsg[0])/3
if promRGB > 125 :
if pixelImg[2]%2!=0:
pixelSet = (pixelImg[0],pixelImg[1],pixelImg[2]+1)
if (pixelImg[2] == 255) :
pixelSet = (pixelImg[0],pixelImg[1],pixelImg[2]-1)
imagen.putpixel((x,y),pixelSet)
else:
if pixelImg[2]%2==0:
pixelSet = (pixelImg[0],pixelImg[1],pixelImg[2]+1)
imagen.putpixel((x,y),pixelSet)
imagen.save("fus.bmp")
return 0
except:
return -1
def desFusionar(arch1):
try:
imagen =Image.open(arch1)
xsize,ysize = imagen.size
for x in range(xsize):
for y in range(ysize):
pixelImg = imagen.getpixel((x,y))
if pixelImg[2] % 2 ==0:
imagen.putpixel((x,y),(255,255,255))
else:
imagen.putpixel((x,y),(0,0,0))
imagen.save("des.bmp")
return 0
except:
return -1
def imprimirModoDeEjecucion():
print "BinSD v1.0"
print "Mode de ejecucion:"
print " fusion.py -D arch1"
print " fusion.py -C arch1 arch2"
if len(sys.argv) == 3 and sys.argv[1]== "-D":
print "Procesando...",
if desFusionar(sys.argv[2])==0:
print "ok"
else:
print "err"
elif len(sys.argv) == 4 and sys.argv[1]== "-C":
print "Procesando...",
if fusionar(sys.argv[2],sys.argv[3]) == 0:
print "ok"
else:
print "err"
else:
imprimirModoDeEjecucion()
En esta entrada quiero felicitar a Arnau y a Alejandro J. Cura. que lograron sacar el desafio.
el script con el que logro sacar el codigo Arnau es …
import PIL.Image img = PIL.Image.open(”fus.bmp”) img.point([0]*256+[0]*256+[( (x&1) << 8 ) for x in range(256)]).show()
el script con el que lo saco Alejandro es …
from itertools import izip, chain, repeat
from PIL import Image
def grouper(n, iterable, padvalue=None):
return izip(*[chain(iterable, repeat(padvalue, n-1))]*n)
i=Image.open("fus.bmp")
r,g,b=i.split()
i=b
s=i.tostring()
d = ["%d"%(ord(c)&1) for c in s]
o = []
for g in grouper(8, d):
b = "".join(g)
o.append(chr(int(b,2)))
b="".join(o)
d=Image.fromstring("1",(800,480),b)
d.show()
Un pequeño desafio.
Hola este desafío es muy simple.
Mediante un script muy simple que escribí en Python de esteganografía, oculté una imagen con un código numérico en la siguiente imagen.
Link: http://www.binsd.com.ar/fusion/fus.bmp
¿Quien lo podrá descifrar?
El que lo logre sacar simplemente poste el código que visualiza en la imagen en los comentarios de esta entrada.
Publicare el script cuando alguien saque el código!!!!!!
Como siempre saludos y espero que les guste.