Usando técnicas de criptografía podemos generar claves para un texto plano que no se puede predecir fácilmente. Usamos criptografía para garantizar el flujo seguro de datos de una fuente a otra sin que un usuario malintencionado acceda a ellos.
requisitos previos:
Lenguaje utilizado – Python .
Tkinter : este módulo se utiliza para crear GUI utilizando el lenguaje python. Para saber más sobre tkinter haz click aquí .
Conceptos básicos de criptografía : la criptografía se utiliza para la comunicación segura.Cifrado: el proceso de codificar un mensaje o información de tal manera que solo las partes autorizadas puedan acceder a él. Descifrado: el proceso de tomar texto codificado o encriptado u otros datos y convertirlos nuevamente en texto.
Algoritmo utilizado
BLOC DE UNA VEZ
El one-time pad
es un tipo de encriptación que es irrompible. Un bloc de una sola vez generará una clave, esta clave es compartida por ambos usuarios, por lo que realiza el cifrado y el descifrado. La clave utilizada se genera aleatoriamente y esta clave se combina con el texto sin formato para formar el texto cifrado. Podemos utilizar diferentes algoritmos para la generación del texto cifrado como modular addition
, modular XOR
, etc. Dado que la clave generada cada vez es única, es imposible de romper.
Ejemplos:
En este ejemplo, usamos una adición modular. Cada letra del mensaje tiene su valor numérico asociado. Este valor numérico se mapea con la letra correspondiente de la clave y el texto cifrado se genera realizando una operación de suma modular. si el valor excede 26, el resultado será la modificación del valor con 26. Aquí ‘GEEKS’ actúa como un mensaje simple y ‘DFSTL’ actúa como la tecla del teclado de una sola vez.
G E E K S message 6 (G) 4 (E) 4 (E) 10 (K) 18 (S) message + 3 (D) 5 (F) 18 (S) 19 (T) 11 (L) key = 9 9 22 29 29 message + key = 9 (J) 9 (J) 22 (W) 3 (D) 3 (D) (message + key) mod 26 J J W D D ? ciphertext
Ya que usamos la suma modular para la generación del texto cifrado. Para recuperar el mensaje original tenemos que realizar una resta modular. Si el valor resulta negativo sumaremos 26 al valor, el valor numérico resultante dará como resultado la generación del mensaje original.
J J W D D ciphertext 9 (J) 9 (J) 22 (W) 3 (D) 3 (D) ciphertext - 3 (D) 5 (F) 18 (S) 19 (T) 11 (L) key = 6 4 4 -16 -8 ciphertext – key = 6 (G) 4 (E) 4 (E) 10(K) 18 (S) ciphertext – key (mod 26) G E E K S ? message
A continuación se muestra la implementación.
# python module for one-timepad import onetimepad # python module to create GUI from tkinter import * root = Tk() root.title("CRYPTOGRAPHY") root.geometry("800x600") def encryptMessage(): pt = e1.get() # inbuilt function to encrypt a message ct = onetimepad.encrypt(pt, 'random') e2.insert(0, ct) def decryptMessage(): ct1 = e3.get() # inbuilt function to decrypt a message pt1 = onetimepad.decrypt(ct1, 'random') e4.insert(0, pt1) # creating labels and positioning them on the grid label1 = Label(root, text ='plain text') label1.grid(row = 10, column = 1) label2 = Label(root, text ='encrypted text') label2.grid(row = 11, column = 1) l3 = Label(root, text ="cipher text") l3.grid(row = 10, column = 10) l4 = Label(root, text ="decrypted text") l4.grid(row = 11, column = 10) # creating entries and positioning them on the grid e1 = Entry(root) e1.grid(row = 10, column = 2) e2 = Entry(root) e2.grid(row = 11, column = 2) e3 = Entry(root) e3.grid(row = 10, column = 11) e4 = Entry(root) e4.grid(row = 11, column = 11) # creating encryption button to produce the output ent = Button(root, text = "encrypt", bg ="red", fg ="white", command = encryptMessage) ent.grid(row = 13, column = 2) # creating decryption button to produce the output b2 = Button(root, text = "decrypt", bg ="green", fg ="white", command = decryptMessage) b2.grid(row = 13, column = 11) root.mainloop()
Salida
para cifrado:
Para el descifrado:
Nota: La técnica predeterminada utilizada por el módulo no es la misma en el ejemplo dado. Podemos aplicar diferentes fórmulas para la generación del texto cifrado, sin embargo, el principio subyacente sigue siendo el mismo.
Publicación traducida automáticamente
Artículo escrito por KaranGupta5 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA