Hola a todos!
Hice una GUI para cifrar y descifrar cadenas con el método de Caesar.
(me basé en el code de: You are not allowed to view links.
Register or
Login | Si quieren más detalles de este método, visiten la página o visiten wikipedia. xD)
Etimología:
El cifrado César recibe su nombre en honor a Julio César, que, según Suetonio, lo usó con un desplazamiento de tres espacios para proteger sus mensajes importantes de contenido militar.
El programa está dividido en 2:
- GUI
- libreria caesar.py (el que nos cifrará/descifrará la cadena)
gui.py :# -*- coding:utf-8 -*-
__author__ = "Barlan"
from caesar import Caesar # Cifrado Cesar
from tkinter import *
class GUI(Tk):
def __init__(self):
Tk.__init__(self)
self.title("GUI | Cifrado Caesar")
self.resizable(0,0)
self.config(bg="black")
self.i = IntVar()
self.s = StringVar()
Label(self, text="Cadena: ", bg="black", fg="white").grid(row=0, column=0)
self.cadena = Entry(self, textvariable=self.s, width=30)
self.cadena.grid(row=0, column=1)
Label(self, text="Clave a usar: ", bg="black", fg="white").grid(row=1, column=0)
self.clave = Entry(self, width=20)
self.clave.grid(row=1, column=1)
self.rc = Radiobutton(self, text="Encriptar", variable=self.i, value=1, command=self.toCaesar, bg="black", fg="white")
self.rc.grid(row=2, column=0)
self.rd = Radiobutton(self, text="Desencriptar", variable=self.i, value=2, command=self.toCaesar, bg="black", fg="white")
self.rd.grid(row=2, column=1)
Label(self, text="Resultado:", bg="black", fg="red", relief=RIDGE).grid(row=3, column=0, columnspan=2)
def toCaesar(self):
if self.i.get() == 1:
cadena = self.cadena.get().upper()
clv = int(self.clave.get())
r = Caesar()
a = r.cifrar(cadena, clv)
Label(self, text=a, bg="black", fg="white", relief=RIDGE).grid(row=4, column=0, columnspan=2, sticky=NSEW)
elif self.i.get() == 2:
cadena = self.cadena.get().upper()
clv = int(self.clave.get())
r = Caesar()
a = r.descifrar(cadena, clv)
Label(self, text=a, bg="black", fg="white", relief=RIDGE).grid(row=4, column=0, columnspan=2, sticky=NSEW)
GUI().mainloop()
caesar.py :# -*- coding: utf-8 -*-
class Caesar():
def __init__(self):
# Lista de caracteres a usar.
self.caract = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789"
def cifrar(self, cadena, clv):
'''
Función que cifrará nuestro mensaje, a partir de la cadena y clave proporcionada.
'''
resultado = ""
for letra in cadena:
if letra == " ":
resultado += " "
else:
op = self.caract.find(letra) + clv
modulada = int(op) % 37
resultado = resultado + str(self.caract[modulada])
return(resultado)
def descifrar(self, cadena, clv):
'''
Función que descifrará nuestro mensaje cifrado, a partir de una clave y cadena proporcionada.
'''
resultado = ""
for letra in cadena:
if letra == " ":
resultado += " "
else:
op = self.caract.find(letra) - clv
modulada = int(op) % 37
resultado = resultado + str(self.caract[modulada])
return(resultado)
Ejemplo de uso:
Si vemos, cada letra nueva se encuentra a 2 letras distantes de la original.
B + 2 = D
A + 2 = C
R + 2 = T
L + 2 = N
A + 2 = C
N + 2 = O
Lo mismo sucede al descifrarla, solo que ahora "retrocedemos" de caracteres:
D - 2 = B
C - 2 = A
T - 2 = R
N - 2 = L
C - 2 = A
O 2 = N
Saludos!