Need a unique gift idea?
A Pastebin account makes a great Christmas gift
SHARE
TWEET

esteganografia.py

alduncin Jul 9th, 2013 316 Never
Upgrade to PRO!
ENDING IN00days00hours00mins00secs
 
  1. from PIL import Image
  2. from sys import argv
  3.  
  4. '''Convierte el Mensaje a binario'''
  5. ''' Convierte binario cada letra en el string,
  6.    omite los espacios 'b' y toma solo de 8-bits
  7.    para representar el valor de la letra en binario'''
  8. def strToNumToBin(string):
  9.     '''recorre el string y va convirtiendo caracter en caracter en numero y despues en binario'''
  10.     return [bin(ord(caracter))[2:].zfill(8) for caracter in string]  #devuelve el arreglo[]
  11.     '''URL:http://code.activestate.com/recipes/578291-string-to-binary/ @Shawn'''
  12.  
  13. '''Convierte Binario a String'''    
  14. def binToNumToStr(binario):
  15.     '''recorrre la cadena binaria bit por bit convirtiendo en numero y despues en string :3'''
  16.     return [chr(int(bit,2)) for bit in binario]                      #devuelve el arreglo[] :')
  17.     '''Ejemplo :B binario (oviusly base 2) a numero y de numero a caracter
  18.       probar en interprete de python :3
  19.       >>chr(int('10011010',2))'''
  20.  
  21. def main():
  22.     entrada= None
  23.     comando= None
  24.     try:
  25.         '''Intenta tomar los argumentos de entrada'''
  26.         imagen  = argv[1]
  27.         comando = argv[2]
  28.     except:
  29.         '''Si no los recibio correctamente los pregunta interactivamente'''
  30.         imagen  = raw_input('Archivo de Imagen: ')
  31.         comando = raw_input('-d para decifrar el mensaje oculto \t  -o para ocultar mensaje: ')
  32.  
  33.     data = Image.open(imagen).convert('RGB')               #abre imagen de acuerdo a la entrada
  34.  
  35.     '''Comando para Ocultar el mensaje dentro de la imagen'''
  36.     if comando == '-o':
  37.         (w, h) = data.size                                  #tamanio de imagen
  38.         resultado = Image.new('RGB', (w, h))                #asigna a resultado los  datos de la imagen original
  39.         nuevo = resultado.load()                            #carga resultado a nueva imagen que generamos
  40.         pixel = data.load()                                 #carga pixeles
  41.  
  42.         '''Entrada de Mensaje '''
  43.         mensaje = raw_input('Mensaje a Ocultar:')
  44.         bits=[]                            #cadenita de bits donde se alojara el numero en binario de el largo del mensaje
  45.        
  46.         for caracter in mensaje:           #checa cada caracter en el mensaje
  47.             bits+= strToNumToBin(caracter) # y acumula cuantos lleva
  48.         largo = len(bits)                  #con esto definimos el largo del mensaje
  49.         cosabin= strToNumToBin(mensaje)#convierte el mensaje en binario
  50.        
  51.         c = 0                         #contador
  52.         for x in xrange(w):           #recorre la imagen
  53.             for y in xrange(h):       # base por altura :3 (w,h) ,i think
  54.                 r, g, b = pixel[x, y]   #los pixeles adquieren coordenadas
  55.                 if c < largo:         #recorremos el num binario del largo del mensaje bit por bit
  56.                     if (int(bits[c]) % 2) == 0:  
  57.                         if b % 2 == 1:#IMPAR cuando es impar c:
  58.                             b = 0    #y si el canal azul es impar le asigna uno
  59.                             if b>254: #si se pasa de los 254 que es su color
  60.                                 b=253 #le restamos para que este dentro de los rangos #no estoy segura que funcione ._.
  61.                             elif b<0: #si no alcanza el minimo para ser un color
  62.                                 b=1   #se queda en 1 dentro de color azul
  63.                     else:
  64.                         if b % 2 == 0:#PAR
  65.                             b = 1    #y si el canal azul es impar se le asigna uno
  66.                             if b>254: #si se pasa de los 254 que es su color
  67.                                 b=253 #le restamos para que este dentro de los rangos #no estoy segura que funcione ._.
  68.                 nuevo[x, y] = r, g, b
  69.                 c += 1
  70.        
  71.         print bits#numero en binario del largo del mensaje
  72.         print largo#numero del largo en decimal ._.
  73.         #if cosabin == mensaje LOAD :D
  74.         print cosabin#imprime el mensaje en binario
  75.         print mensaje#imprime el mensaje original
  76.  
  77.         #procederiamos a ocultarlo :B
  78.         resultado.save(imagen[:imagen.index('.')]+'copy'+imagen[imagen.index('.'):],'PNG')
  79.         resultado.show()
  80.  
  81.     else:
  82.         if comando == '-d':
  83.             (w, h) = data.size                                  #tamanio de imagen
  84.             #aqui debe de hacer lo contrario convertir binario a string
  85.             #y luego comparar y Done... :3
  86.             #print binToNumToStr(cosabin)
  87.             #print "".join(binToNumToStr(cosabin))
  88.             #for x in xrange(w):
  89.             #for y in xrange(h):
  90.             #r, g, b = pixel[x, y]
  91.             #nuevo[x, y] = r, r, 0
  92.             #b=1#aqui aun no se que pedo
  93.             print 'ya'
  94.         else:
  95.             print 'comando no valido, empecemos de nuevo.'
  96.             main()
  97.            
  98. if __name__ == '__main__':
  99.     main()
  100.     ''' Al llamar a al programa la sintaxis para que funcione
  101.    a partir de argumentos de programa es la siguiente:
  102.    esteganografia.py imagen.extencion -comando
  103.    donde:
  104.    extencion = .png /.tiff /.bmp
  105.    y comando = -o / -d '''
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top