SHOW:
|
|
- or go back to the newest paste.
1 | ###########steg.py############## | |
2 | #reddit.com/r/dailyprogrammer | |
3 | #int-101 | |
4 | #puts data in image | |
5 | ||
6 | import sys, Image | |
7 | ||
8 | #verify correct number of arguments entered | |
9 | if len(sys.argv) != 3: | |
10 | print 'Please specify correct arguments' | |
11 | print 'Usage: steg.py {image file} {data file}' | |
12 | sys.exit() | |
13 | ||
14 | #get file names from arguments | |
15 | image_fn = sys.argv[1] | |
16 | data_fn = sys.argv[2] | |
17 | ||
18 | #read in our image file and declare variables | |
19 | img = Image.open(image_fn) | |
20 | pixels = img.load() | |
21 | im_width = img.size[0] | |
22 | im_height = img.size[1] | |
23 | ||
24 | #read in our data file and declare variables | |
25 | with open(data_fn, 'r') as f: | |
26 | data = f.read() | |
27 | b_data = "" | |
28 | for char in data: | |
29 | b_data += '%08d'%int(bin(ord(char))[2:]) | |
30 | ||
31 | b_data += '11111111' #used to find end when getting data out | |
32 | ||
33 | #add data to image file | |
34 | for x in range(im_width): | |
35 | for y in range(im_height): | |
36 | if len(b_data) == 0: | |
37 | break | |
38 | ||
39 | pix = pixels[x,y] | |
40 | ||
41 | blueBase = bin(pix[2])[2:] #current pixels blue binary value | |
42 | newBlue = blueBase[:-2] + b_data[0:2] #create new binary value | |
43 | ||
44 | b_data = b_data[2:] #remove used bits from b_data | |
45 | ||
46 | pixels[x,y] = (pix[0],pix[1],int(newBlue,2)) #put new pixel into image file | |
47 | else: | |
48 | continue | |
49 | break | |
50 | ||
51 | #save new image | |
52 | - | img.save('steg'+image_fn) |
52 | + | img.save('steg.png') |
53 | ||
54 | ###########desteg.py############# | |
55 | #desteg.py | |
56 | #reddit.com/r/dailyprogrammer | |
57 | #int-101 | |
58 | #pulls data out of image | |
59 | ||
60 | import sys, Image | |
61 | ||
62 | #verify correct number of arguments entered | |
63 | if len(sys.argv) != 2: | |
64 | print 'Please specify correct arguments' | |
65 | print 'Usage: desteg.py {image file}' | |
66 | sys.exit() | |
67 | ||
68 | #get file names from arguments | |
69 | image_fn = sys.argv[1] | |
70 | ||
71 | #read in our image file and declare variables | |
72 | img = Image.open(image_fn) | |
73 | pixels = img.load() | |
74 | im_width = img.size[0] | |
75 | im_height = img.size[1] | |
76 | ||
77 | #get bianry data | |
78 | b_data = "" | |
79 | for x in range(im_width): | |
80 | for y in range(im_height): | |
81 | pix = pixels[x,y] | |
82 | b_data += bin(pix[2])[-2:] | |
83 | ||
84 | #get actual data | |
85 | s_data = "" | |
86 | for x in range(0,len(b_data),8): | |
87 | chunk = b_data[x:x+8] | |
88 | if chunk == '11111111': | |
89 | break #end of steganography data | |
90 | ||
91 | char = chr(int(chunk,2)) | |
92 | s_data += char | |
93 | ||
94 | print s_data |