Omnibus's picture
Update app.py
57f33cf
import gradio as gr
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
import os
import base64
import hashlib
from pathlib import Path
import qr
import stegan
def create_key(passw):
key = passw.encode()
h = hashlib.new('sha256')
h.update(key)
key = h.hexdigest()
key = key.encode()
#salt = os.urandom(16)
salt = key
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=480000,
)
key = base64.urlsafe_b64encode(kdf.derive(key))
return key
def encrypt(passw,mes=None,img=None,doc=None):
#key = Fernet.generate_key()
key = create_key(passw)
fernet = Fernet(key)
enc_mes=None
enc_file=None
if mes != None and mes != "":
bytes_m = mes.encode()
enc_mes = fernet.encrypt(bytes_m)
enc_mes = f'{enc_mes}+aaa+'
if img != None:
with open(f'{img}', "rb") as image_file:
bytes_i = base64.b64encode(image_file.read())
if mes != None and mes != "":
im_bytes = fernet.encrypt(bytes_i)
enc_mes = f'{enc_mes}{im_bytes}+bbb+'
else:
im_bytes = fernet.encrypt(bytes_i)
enc_mes = f'{im_bytes}+bbb+'
#enc_qr = qr.make_qr(txt=(enc_mes.strip('"')))
qr_link = "https://omnibus-fernet-encryption-qr.hf.space"
enc_qr = stegan.conv_im(qr_link=qr_link,data=enc_mes)
if doc != None:
print(dir(doc))
print(doc.name)
#print(doc.file)
doc_name = doc.name
doc_name = doc_name.split("/",4)[4]
#bytes_d = doc.encode()
#doc = Path(doc)
with open(doc.name, "rb") as file:
# read all file data
file_data = file.read()
enc_doc = fernet.encrypt(file_data)
og_name = doc.name
og_end = og_name.split(".",1)[1]
og_front=og_name.split(".",1)[0]
enc_file=f'{doc.name}.ocrpt'
with open(enc_file, "wb") as file:
file.write(enc_doc)
return enc_mes,enc_file,enc_qr
def decrypt(passw,enc_in=None):
key = create_key(passw)
fernet = Fernet(key)
dec_im = None
mes_dec= None
enc_in=enc_in.strip('"')
print (f'enc_in :::: {enc_in}')
if "+aaa+" in enc_in:
mes1=enc_in.split("+aaa+",1)[0]
mes1=mes1.strip("b'").strip("'")
mes_bytes = bytes(mes1,'utf-8')
mes_dec = fernet.decrypt(mes_bytes).decode()
if "+bbb+" in enc_in:
mes12=enc_in.split("+aaa+",1)[1]
mes2=mes12.split("+bbb+",1)[0]
mes2=mes2.strip("b'").strip("'")
im_bytes = bytes(mes2,'utf-8')
print(f'im_bytes::{im_bytes}')
mes2 = fernet.decrypt(mes2).decode()
#base = bytes(decMessage, 'utf-8')
with open(f"finished_im.png", "wb") as fh:
#fh.write(base64.decodebytes(im_bytes))
fh.write(base64.decodebytes(bytes(mes2, 'utf-8')))
fh.close
dec_im = "finished_im.png"
if not "+aaa+" in enc_in:
if "+bbb+" in enc_in:
mes2 = enc_in.split("+bbb+",1)[0]
mes2=mes2.strip("b'").strip("'")
im_bytes = bytes(mes2,'utf-8')
print(f'im_bytes2::{im_bytes}')
mes2 = fernet.decrypt(mes2).decode()
#base = bytes(decMessage, 'utf-8')
with open(f"finished_im.png", "wb") as fh:
#fh.write(base64.decodebytes(im_bytes))
fh.write(base64.decodebytes(bytes(mes2, 'utf-8')))
fh.close
dec_im = "finished_im.png"
return(dec_im,mes_dec)
def decode_doc(passw,doc=None):
key = create_key(passw)
fernet = Fernet(key)
doc_name = doc.name
doc_name = doc_name.split("/",4)[4]
#bytes_d = doc.encode()
#doc = Path(doc)
with open(doc.name, "rb") as file:
# read all file data
file_data = file.read()
dec_doc = fernet.decrypt(file_data)
og_name = doc.name
og_end = og_name.split(".",1)[1]
og_front=og_name.split(".",1)[0]
dec_file = doc.name.strip(".ocrpt")
#enc_file=f'{doc.name}.ocrpt'
with open(dec_file, "wb") as file:
file.write(dec_doc)
return dec_file
def decode_qr(im,passw):
with open(f'{im}', "rb") as image_file:
bytes_i = base64.b64encode(image_file.read())
decode_qr = stegan.decode(im)
dec_im = decrypt(passw, enc_in=decode_qr)
'''
print(f'decoded QR::{decode_qr}')
key = create_key(passw)
fernet = Fernet(key)
dec_im = None
mes_dec= None
enc_in=decode_qr.strip('"')
print (f'enc_in :::: {enc_in}')
if "+aaa+" in enc_in:
mes1=enc_in.split("+aaa+",1)[0]
mes1=mes1.strip("b'").strip("'")
mes_bytes = bytes(mes1,'utf-8')
mes_dec = fernet.decrypt(mes_bytes).decode()
if "+bbb+" in enc_in:
mes12=enc_in.split("+aaa+",1)[1]
mes2=mes12.split("+bbb+",1)[0]
mes2=mes2.strip("b'").strip("'")
im_bytes = bytes(mes2,'utf-8')
print(f'im_bytes::{im_bytes}')
mes2 = fernet.decrypt(mes2).decode()
#base = bytes(decMessage, 'utf-8')
with open(f"finished_im.png", "wb") as fh:
#fh.write(base64.decodebytes(im_bytes))
fh.write(base64.decodebytes(bytes(mes2, 'utf-8')))
fh.close
dec_im = "finished_im.png"
if not "+aaa+" in enc_in:
if "+bbb+" in enc_in:
mes2 = enc_in.split("+bbb+",1)[0]
mes2=mes2.strip("b'").strip("'")
im_bytes = bytes(mes2,'utf-8')
print(f'im_bytes2::{im_bytes}')
mes2 = fernet.decrypt(mes2).decode()
#base = bytes(decMessage, 'utf-8')
with open(f"finished_im.png", "wb") as fh:
#fh.write(base64.decodebytes(im_bytes))
fh.write(base64.decodebytes(bytes(mes2, 'utf-8')))
fh.close
dec_im = "finished_im.png"
'''
return(dec_im,mes_dec)
with gr.Blocks() as app:
with gr.Tab("Encrypt"):
pass_in=gr.Textbox(label="Set Password")
with gr.Tab("String"):
mes = gr.Textbox(label = "Message")
with gr.Row():
im = gr.Image(type="filepath")
with gr.Tab("File"):
doc=gr.File()
enc_doc_out=gr.File()
en_btn = gr.Button("Encrypt")
enc_out = gr.Textbox(label="Encrypted Bytes")
enc_qr_out = gr.Image(label = "Encrypted QR")
with gr.Tab("Decrypt"):
pass_out = gr.Textbox(label="Enter Password")
with gr.Tab("String"):
enc_in = gr.Textbox(label="Encrypted Bytes")
d_btn = gr.Button("Decrypt")
d_txt = gr.Textbox(label="Decrypted")
d_im =gr.Image(label="Decrytped Image")
with gr.Tab("File"):
dec_doc_in = gr.File()
dec_doc_btn = gr.Button("Decrypt")
dec_doc_out=gr.File()
with gr.Tab("QR"):
dec_qr_im = gr.Image(type="filepath")
dec_qr_txt = gr.Textbox(label="Decrypted")
dec_qr_im_out =gr.Image(label="Decrytped Image")
dec_qr_btn = gr.Button("Decrypt")
dec_qr_btn.click(decode_qr,[dec_qr_im,pass_out],[dec_qr_im_out,dec_qr_txt])
dec_doc_btn.click(decode_doc,[pass_out,dec_doc_in],dec_doc_out)
en_btn.click(encrypt,[pass_in,mes,im,doc],[enc_out,enc_doc_out,enc_qr_out])
d_btn.click(decrypt,[pass_out,enc_in],[d_im,d_txt])
app.launch()