Omnibus's picture
Create app.py
e255167
raw
history blame
8.84 kB
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
import json
def trans_block(sender,recipient,amount):
transaction = [{
'sender': sender,
'recipient': recipient,
'amount': amount
}]
json_object = json.dumps(transaction, indent=4)
print (json_object)
return json_object
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,trans_s=None,trans_r=None,trans_a=None):
#key = Fernet.generate_key()
key = create_key(passw)
fernet = Fernet(key)
enc_mes=""
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+'
if trans_s != None and trans_r != None and trans_a != None and trans_s != "" and trans_r != "" and trans_a != "":
trans = trans_block(trans_s,trans_r,trans_a)
bytes_j = trans.encode()
if mes != None or mes != "" or img != None or img !="":
json_bytes = fernet.encrypt(bytes_j)
enc_mes = f'{enc_mes}{json_bytes}+ccc+'
else:
json_bytes = fernet.encrypt(bytes_j)
enc_mes = f'{json_bytes}+ccc+'
#enc_qr = qr.make_qr(txt=(enc_mes.strip('"')))
m = hashlib.sha256()
bytes_enc_mes = enc_mes.encode()
m.update(bytes_enc_mes)
out = m.hexdigest()
out = out.encode()
print(out)
qr_link = out
enc_qr = stegan.conv_im(qr_link=qr_link,data=enc_mes)
if doc != None:
#print(dir(doc))
#print(doc.name)
doc_name = doc.name
doc_name = doc_name.split("/",4)[4]
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)
#current_url.url_return("www.google.com")
return enc_mes,enc_file,enc_qr,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 "+ccc+" in enc_in:
mes13=enc_in.split("+bbb+",1)[1]
mes3=mes13.split("+ccc+",1)[0]
mes3=mes3.strip("b'").strip("'")
json_bytes = bytes(mes3,'utf-8')
print(f'im_bytes::{json_bytes}')
dec_json = fernet.decrypt(json_bytes).decode()
if not "+bbb+" in enc_in:
if "+ccc+" in enc_in:
mes14=enc_in.split("+aaa+",1)[1]
mes4=mes14.split("+ccc+",1)[0]
mes4=mes4.strip("b'").strip("'")
json_bytes = bytes(mes4,'utf-8')
print(f'im_bytes::{json_bytes}')
dec_json = fernet.decrypt(json_bytes).decode()
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"
if "+ccc+" in enc_in:
mes13=enc_in.split("+bbb+",1)[1]
mes3=mes13.split("+ccc+",1)[0]
mes3=mes3.strip("b'").strip("'")
json_bytes = bytes(mes3,'utf-8')
print(f'im_bytes::{json_bytes}')
dec_json = fernet.decrypt(json_bytes).decode()
if not "+bbb+" in enc_in:
if "+ccc+" in enc_in:
mes4=enc_in.split("+ccc+",1)[0]
mes14=mes4.strip("b'").strip("'")
json_bytes = bytes(mes14,'utf-8')
print(f'im_bytes::{json_bytes}')
dec_json = fernet.decrypt(json_bytes).decode()
return(dec_im,mes_dec,dec_json)
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,mes_dec,dec_json = decrypt(passw, enc_in=decode_qr)
return(dec_im,mes_dec,dec_json)
with gr.Blocks() as app:
with gr.Tab("Encrypt"):
pass_in=gr.Textbox(label="Set Password")
with gr.Tab("String"):
with gr.Row():
with gr.Column():
send=gr.Textbox(label="Sender")
rec=gr.Textbox(label="Recipient")
am=gr.Textbox(label="Amount")
with gr.Column():
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 Message")
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")
with gr.Row():
dec_qr_txt = gr.Textbox(label="Decrypted Message")
d_json = gr.Textbox(label="Decrypted JSON")
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,d_json])
dec_doc_btn.click(decode_doc,[pass_out,dec_doc_in],dec_doc_out)
en_btn.click(encrypt,[pass_in,mes,im,doc,send,rec,am],[enc_out,enc_doc_out,enc_qr_out,dec_qr_im])
d_btn.click(decrypt,[pass_out,enc_in],[d_im,d_txt,d_json])
app.launch()