使用Python的密码学 GUI
使用加密技术,我们可以为无法轻易预测的纯文本生成密钥。我们使用密码学来确保数据从一个来源安全可靠地流向另一个来源,而不会被恶意用户访问。
Prerequisites:
Language used – Python.
Tkinter – This module is used to make GUIs using python language. To know more about tkinter click here.
Basics of Cryptography – Cryptography is used for Secure Communication.
使用的算法
一次性垫one-time pad
本是一种牢不可破的加密。一次性便笺将生成一个密钥,该密钥由用户共享,因此它可以进行加密和解密。使用的密钥是随机生成的,并且该密钥与明文组合以形成密文。我们可以使用不同的算法来生成密文,例如modular addition
、 modular XOR
等。由于每次生成的密钥都是唯一的,因此不可能破解。
例子:
在此示例中,我们使用模块化添加。消息的每个字母都有与之关联的数值。该数值与密钥对应的字母进行映射,通过模加运算生成密文。如果值超过 26,则结果将是 26 的值的 mod。这里“GEEKS”充当普通消息,“DFSTL”充当一次性填充键。
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
因为我们使用模加法来生成密文。为了取回原始消息,我们必须执行模减法。如果结果是负数,我们将在该值上加上 26,结果数值将导致原始消息的生成。
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
下面是实现。
# 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()
输出
对于加密:
对于解密:
注意:模块使用的默认技术与给出的示例不同。我们可以应用不同的公式来生成密文,但是基本原理保持不变。