使用加密技术, 我们可以为不容易预测的纯文本生成密钥。我们使用密码术来确保数据从一个来源到另一来源的安全可靠的流动, 而不会被恶意用户访问。
先决条件:使用的语言– Python。 Tkinter –此模块用于使用python语言制作GUI。要了解有关tkinter的更多信息, 请单击此处。密码学的基础知识–密码学用于安全通信。加密–以仅授权方可以访问的方式对消息或信息进行编码的过程。解密–获取编码或加密的文本或其他数据并将其转换回文本的过程。
使用的算法:一次性垫
一次性垫是一种不可破解的加密类型。一次性填充将生成一个密钥, 该密钥由用户共享, 因此可以进行加密和解密。所使用的密钥是随机生成的, 并且此密钥与纯文本结合在一起以形成密文。我们可以使用不同的算法来生成密文, 例如
模块化加法
,
模块化异或
等等。由于每次生成的密钥都是唯一的, 因此无法破解。
例子:
在此示例中, 我们使用模块化加法。邮件中的每个字母都有与之关联的数字值。将该数值与密钥的对应字母进行映射, 并且通过执行模加操作生成密文。如果该值超过26, 则结果将是该值的26的模。在这里, " 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 DS课程。