在本教程中,我们将探讨一种加密方法,称为凯撒密码。它是密码学的一部分。

介绍

在这种技术中,每个字符都被替换为字母表中某个固定位置之后或之前的字母。例如 - 字母B被替换为向下移动两个位置的D。D将变成F,依此类推。这种方法以流行的虚构人物朱利叶斯·凯撒命名,他用它与官员们进行通信。

有一个用于实现它的算法。让我们了解以下内容。

凯撒密码算法的特点

这个算法包括以下几个特点。

  • 这个技术相当简单,易于应用于加密。
  • 每个文本都被替换为字母表中的固定位置(向下或向上)。
  • 这是一种简单的替代密码类型。

需要一个整数值来定义文本的每个字母已经移动了多少位。这个整数值也被称为“位移”。

我们可以使用模运算来表示这个概念,首先将字母转换为数字,根据模式,A = 0,B = 1,C = 2,D = 3…….. Z = 25。

以下数学公式可用于移动n个字母。

如何解密?

解密与加密相同。我们可以创建一个函数,该函数将以相反的方式完成移位,以解密原始文本。然而,我们可以使用密码在模块下的循环属性。

密码(n) = 解密(26-n)

可以用于解密的相同函数。不过,我们将修改位移值,使得位移 = 26 - 位移。

160-1.png

让我们了解以下示例 -

示例 -

def encypt_func(txt, s):  
    result = ""  
  
  
# transverse the plain txt  
    for i in range(len(txt)):  
        char = txt[i]  
        # encypt_func uppercase characters in plain txt  
  
        if (char.isupper()):  
            result += chr((ord(char) + s - 64) % 26 + 65)  
        # encypt_func lowercase characters in plain txt  
        else:  
            result += chr((ord(char) + s - 96) % 26 + 97)  
    return result  
# check the above function  
txt = "CEASER CIPHER EXAMPLE"  
s = 4  
  
print("Plain txt : " + txt)  
print("Shift pattern : " + str(s))  
print("Cipher: " + encypt_func(txt, s))

输出:

Plain txt : CEASER CIPHER EXAMPLE
Shift pattern : 4
Cipher: HJFXJWsHNUMJWsJCFRUQJ

上面的代码逐个遍历了字符。根据文本的加密和解密过程规则,它传输了每个字符。

我们定义了一组特定的位置,生成了一个密码文本。

凯撒密码算法的漏洞

我们可以以各种方式破解密码文本。其中一种方法是暴力破解技术,它涉及尝试每个可能的解密密钥。这种技术并不困难,也不需要太多的努力。

让我们了解以下示例。

示例 -

msg = 'rGMTLIVrHIQSGIEWIVGIEWIV' #encrypted msg  
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'  
  
for k in range(len(LETTERS)):  
   transformation = ''  
   for s in msg:  
      if s in LETTERS:  
         n = LETTERS.find(s)  
         n = n - k  
         if n < 0:  
            n = n + len(LETTERS)  
         transformation = transformation + LETTERS[n]  
  
      else:  
         transformation = transformation + s  
print('Hacking k #%s: %s' % (k, transformation)) 

输出:

Hacking k #25: rHNUMJWrIJRTHJFXJWHJFXJW

位移密码

位移密码算法是一种技术,其中明文中的字母表顺序被重新排列以形成密码文本。此算法不支持实际的明文字母。

让我们使用一个示例来了解这个算法。

示例 -

我们将采用简单的栏式位移密码示例,在其中将每个字符水平写在指定的字母宽度上。垂直书写的文本是密码,它创建了完全不同的密码文本。

让我们以明文为例,应用简单的栏式位移技术,如下所示。

160-2.png

我们水平放置了明文,密码文本以垂直格式创建为:hotnejpt.lao.lvi. 要解密这个,接收者必须使用相同的表格将密码文本解密为明文。

代码 -

让我们了解以下示例。

def split_len(sequence, length):  
   return [sequence[i:i + length] for i in range(0, len(sequence), length)]  
def encode(k, plaintxt):  
   order = {  
      int(val): n for n, val in enumerate(k)  
   }  
ciphertext = ''  
  
for index in sorted(order.ks()):  
   for part in split_len(plaintxt, len(k)):  
      try:ciphertext += part[order[index]]  
    except IndexError:  
            continue  
   return ciphertext  
print(encode('3214', 'HELLO')) 

说明 -

在上面的代码中,我们创建了一个名为split_len()的函数,该函数将明文字符拆分为列或行格式。

encode()方法使用指定的列数创建了密码文本,并通过读取每一列来打印每个密码文本。

注意 - 位移技术旨在显著提高密码安全性。密码分析师观察到,使用相同的位移密码重新加密密码文本可以提供更好的安全性。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程