Spaces:
Sleeping
Sleeping
File size: 2,143 Bytes
c839edd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import gradio as gr
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
import io
def pad(data):
pad_len = AES.block_size - len(data) % AES.block_size
return data + bytes([pad_len] * pad_len)
def unpad(data):
return data[:-data[-1]]
def encrypt_image(image, password):
key = password.encode('utf-8').ljust(32, b'\0')[:32]
img_bytes = image.read()
img_padded = pad(img_bytes)
cipher = AES.new(key, AES.MODE_CBC)
ciphertext = cipher.encrypt(img_padded)
encrypted_data = base64.b64encode(cipher.iv + ciphertext).decode('utf-8')
return encrypted_data
def decrypt_image(encrypted_text, password):
try:
key = password.encode('utf-8').ljust(32, b'\0')[:32]
encrypted_data = base64.b64decode(encrypted_text)
iv = encrypted_data[:16]
ciphertext = encrypted_data[16:]
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
decrypted = unpad(cipher.decrypt(ciphertext))
return decrypted
except Exception as e:
return f"Decryption failed: {str(e)}"
def encrypt_ui(image, password):
if image is None or password.strip() == "":
return "Please upload image and enter a password."
return encrypt_image(image, password)
def decrypt_ui(encrypted_text, password):
result = decrypt_image(encrypted_text, password)
if isinstance(result, bytes):
return gr.Image.update(value=io.BytesIO(result))
return result
footer_note = "π Made by Kratu Pandey, B.Tech CSE"
encrypt_tab = gr.Interface(
fn=encrypt_ui,
inputs=[
gr.File(label="Upload Image"),
gr.Text(label="Password", type="password")
],
outputs="text",
title="π Encrypt Image",
description=footer_note
)
decrypt_tab = gr.Interface(
fn=decrypt_ui,
inputs=[
gr.Text(label="Encrypted Text"),
gr.Text(label="Password", type="password")
],
outputs="image",
title="π Decrypt Image",
description=footer_note
)
gr.TabbedInterface(
[encrypt_tab, decrypt_tab],
tab_names=["Encrypt Image", "Decrypt Image"]
).launch()
|