Spaces:
Sleeping
Sleeping
| 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() | |