在Python中的凯撒密码

在Python中的凯撒密码

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

介绍

在这种技术中,每个字符都被替换为字母,按照字母表中固定的位置向前或向后移动。例如 – 字母B被替换为向下两个位置的字母D。D会变成F,依此类推。这种方法以著名的虚构角色朱利叶斯·凯撒命名,他用它与官员交流。

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

凯撒密码算法的特点

这个算法有几个特点,如下:

  • 这种技术非常简单,可以应用于加密。
  • 每个文本都被固定数量的字母位置向下或向上替换。
  • 它是一种简单的替代密码类型。

每个字母的整数值都需要定义,这些字母已经向下移动。这个整数值也被称为位移。

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

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

如何解密

解密和加密是相同的。我们可以创建一个函数,在相反的路径中实现移动以解密原始文本。不过,我们可以利用模运算下的密码周期性属性。

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

解密可以使用相同的函数。相反,我们将修改位移值,使其等于 26 – 位移。

在Python中的凯撒密码

让我们来理解下面的示例 –

示例

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

位移密码

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

让我们通过一个示例来理解这个算法。

示例

我们将采用简单的列置换密码的示例,其中我们将每个字符水平地写在明文中,指定字母宽度。垂直书写的文本是密文,它创建了一个完全不同的密文。

让我们采用一个明文,并将简单的列置换技术应用如下。

在Python中的凯撒密码

我们把纯文本水平放置,密文以垂直格式创建为: 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() 方法使用指定的列数创建了密码文本,我们通过读取每一列打印了每个密码文本。

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程