Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from substitution_cipher import encrypt, decrypt | |
| # Funciones adaptadas para interfaz | |
| def cifrar_texto(texto, clave): | |
| if not texto or not clave: | |
| return "⚠️ Ingresa texto y clave." | |
| try: | |
| return encrypt(texto, clave) | |
| except Exception as e: | |
| return f"Error al cifrar: {e}" | |
| def descifrar_texto(texto_cifrado, clave): | |
| if not texto_cifrado or not clave: | |
| return "⚠️ Ingresa texto cifrado y clave." | |
| try: | |
| return decrypt(texto_cifrado, clave) | |
| except Exception as e: | |
| return f"Error al descifrar: {e}" | |
| # Interfaz con Gradio | |
| with gr.Blocks(theme="soft") as demo: | |
| gr.Markdown("## 🔐 Cifrado por Sustitución (Confusión / Ofuscación)") | |
| gr.Markdown("Inspirado en el mecanismo **SubBytes de AES** — solo sustitución, sin permutación.") | |
| with gr.Tab("Cifrar"): | |
| texto = gr.Textbox(label="Texto a cifrar") | |
| clave = gr.Textbox(label="Clave", type="password") | |
| boton_cifrar = gr.Button("🔒 Cifrar") | |
| salida_cifrado = gr.Textbox(label="Texto cifrado (Base64)") | |
| boton_cifrar.click(fn=cifrar_texto, inputs=[texto, clave], outputs=salida_cifrado) | |
| with gr.Tab("Descifrar"): | |
| texto_cifrado = gr.Textbox(label="Texto cifrado (Base64)") | |
| clave2 = gr.Textbox(label="Clave", type="password") | |
| boton_descifrar = gr.Button("🔓 Descifrar") | |
| salida_descifrado = gr.Textbox(label="Texto descifrado") | |
| boton_descifrar.click(fn=descifrar_texto, inputs=[texto_cifrado, clave2], outputs=salida_descifrado) | |
| demo.launch() | |