📜  使用Python的密码学 GUI

📅  最后修改于: 2022-05-13 01:55:20.701000             🧑  作者: Mango

使用Python的密码学 GUI

使用加密技术,我们可以为无法轻易预测的纯文本生成密钥。我们使用密码学来确保数据从一个来源安全可靠地流向另一个来源,而不会被恶意用户访问。

使用的算法

一次性垫
one-time pad本是一种牢不可破的加密。一次性便笺将生成一个密钥,该密钥由用户共享,因此它可以进行加密和解密。使用的密钥是随机生成的,并且该密钥与明文组合以形成密文。我们可以使用不同的算法来生成密文,例如modular additionmodular 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()

输出
对于加密:
python-加密

对于解密:
python-解密

注意:模块使用的默认技术与给出的示例不同。我们可以应用不同的公式来生成密文,但是基本原理保持不变。