###########steg.py############## #reddit.com/r/dailyprogrammer #int-101 #puts data in image import sys, Image #verify correct number of arguments entered if len(sys.argv) != 3: print 'Please specify correct arguments' print 'Usage: steg.py {image file} {data file}' sys.exit() #get file names from arguments image_fn = sys.argv[1] data_fn = sys.argv[2] #read in our image file and declare variables img = Image.open(image_fn) pixels = img.load() im_width = img.size[0] im_height = img.size[1] #read in our data file and declare variables with open(data_fn, 'r') as f: data = f.read() b_data = "" for char in data: b_data += '%08d'%int(bin(ord(char))[2:]) b_data += '11111111' #used to find end when getting data out #add data to image file for x in range(im_width): for y in range(im_height): if len(b_data) == 0: break pix = pixels[x,y] blueBase = bin(pix[2])[2:] #current pixels blue binary value newBlue = blueBase[:-2] + b_data[0:2] #create new binary value b_data = b_data[2:] #remove used bits from b_data pixels[x,y] = (pix[0],pix[1],int(newBlue,2)) #put new pixel into image file else: continue break #save new image img.save('steg.png') ###########desteg.py############# #desteg.py #reddit.com/r/dailyprogrammer #int-101 #pulls data out of image import sys, Image #verify correct number of arguments entered if len(sys.argv) != 2: print 'Please specify correct arguments' print 'Usage: desteg.py {image file}' sys.exit() #get file names from arguments image_fn = sys.argv[1] #read in our image file and declare variables img = Image.open(image_fn) pixels = img.load() im_width = img.size[0] im_height = img.size[1] #get bianry data b_data = "" for x in range(im_width): for y in range(im_height): pix = pixels[x,y] b_data += bin(pix[2])[-2:] #get actual data s_data = "" for x in range(0,len(b_data),8): chunk = b_data[x:x+8] if chunk == '11111111': break #end of steganography data char = chr(int(chunk,2)) s_data += char print s_data