steg_demo / utils2.py
has12zen
final fantasy
10ce6b2
raw
history blame contribute delete
No virus
5.09 kB
from PIL import Image
prime = 19
p_base = 1
arr1=[]
arr2=[]
gidx =0
msglog1 = []
gidxlog1 =[]
msglog2 = []
gidxlog2 =[]
base_log1 = []
base_log2 = []
def reverse_slicing(s):
return s[::-1]
def getbinary(msg):
binary = ""
for char in msg:
pc = format(ord(char), '08b')
c = pc[1:]
c = reverse_slicing(c)
binary += c
return binary
def getSkips(char):
global p_base
global prime
p_base = (p_base*prime)%100;
first = p_base%10+1;
tmp = int(p_base/10)
second=tmp%10+1;
if(char=='0'):
return first
return second
def iterateSecret(binary_secret):
global gidx
t = binary_secret[gidx];
m = getSkips(t);
gidx=(gidx+1)%len(binary_secret);
return m;
def unravel(bt):
text = ""
for i in range(0, len(bt), 7):
tc= bt[i:i+7]
tc = reverse_slicing(tc)
tc = '0'+tc
text +=tc;
final=''
for i in range(0, len(text), 8):
final += chr(int(text[i:i+8], 2))
return final
def encrypt(text,key, image):
global arr1, gidx,msglog1,gidxlog1,p_base,base_log1
p_base = 1
final=''
pc=''
for cz in text:
pc += format(ord(cz), '08b')
c = pc[1:]
for i in range(0, len(pc), 8):
final += chr(int(pc[i:i+8], 2))
print(final)
gidx = 0;
pixels = list(image.getdata())
binary_msg = getbinary(text)
binary_secret = getbinary(key)
mod = len(pixels)
i=0
base_log1.clear();
gidxlog1.clear();
msglog1.clear();
arr1.clear()
base_log1+=[p_base]
binary_msg+='011111111'
print(binary_msg)
skips = 0;
new_pixels = []
for rgb in pixels:
if type(rgb) == tuple:
tcr = []
for clr in rgb:
if skips == 0:
skips+=iterateSecret(binary_secret)
gidxlog1+=[gidx]
base_log1+=[p_base]
msglog1+=[binary_secret[gidx]]
arr1+=[skips]
if i < len(binary_msg):
if binary_msg[i]=='0':
if clr%2!=0:
clr-=1
else:
if clr%2==0:
clr+=1
i+=1
else:
skips-=1;
tcr+=[clr]
new_pixels += [tuple(tcr)]
elif type(rgb) == int:
clr = rgb
if skips == 0:
skips+=iterateSecret(binary_secret)
gidxlog1+=[gidx]
base_log1+=[p_base]
msglog1+=[binary_secret[gidx]]
arr1+=[skips]
if i < len(binary_msg):
if binary_msg[i]=='0':
if clr%2!=0:
clr-=1
else:
if clr%2==0:
clr+=1
i+=1
else:
skips-=1;
new_pixels+=[clr]
new_image = Image.new(image.mode, image.size)
new_image.putdata(new_pixels)
return new_image
def decrypt(key,image):
global arr2,gidxlog2,msglog2,p_base,base_log2,gidx
p_base = 1
gidx = 0
pixels = list(image.getdata())
base_log2.clear()
msglog2.clear()
gidxlog2.clear()
arr2.clear()
base_log2+=[p_base]
binary_secret = getbinary(key)
ones =0;
skips = 0;
binary_msg = ""
flag =0
for rgb in pixels:
if type(rgb) == tuple:
for clr in rgb:
if skips ==0:
cnt = clr%2;
if cnt ==1:
ones+=1;
else:
ones=0;
binary_msg += str(cnt);
if ones ==8:
flag =1;
break
skips+=iterateSecret(binary_secret)
gidxlog2+=[gidx]
base_log2+=[p_base]
msglog2+=[binary_secret[gidx]]
arr2+=[skips]
else:
skips-=1
elif type(rgb) == int:
clr = rgb
if skips ==0:
cnt = clr%2;
if cnt ==1:
ones+=1;
else:
ones=0;
binary_msg += str(cnt);
if ones ==8:
flag =1;
break
skips+=iterateSecret(binary_secret)
gidxlog2+=[gidx]
base_log2+=[p_base]
msglog2+=[binary_secret[gidx]]
arr2+=[skips]
else:
skips-=1
if flag ==1:
break;
print(binary_msg)
binary_msg = binary_msg[:-9]
print(binary_msg)
txt = unravel(binary_msg)
print(txt)
print(arr1[:10],arr2[:10])
print(msglog1[:10],gidxlog1[:10])
print(msglog2[:10],gidxlog2[:10]);
print(base_log1[0:10],base_log2[0:10])
return txt