python实现凯撒密码、凯撒加解密算法

1. 凯撒密码简介

凯撒密码是一种简单的加密方法,又叫移位密码,是古典密码学中的一种。其基本思想是把原文中的每个字母都向后推移三位得到密文,同时也可以通过密文向前推移三位得到原文。其中移动的位数可以是任意数字,不一定是三。为了方便起见,我们在本文中的实现中都采用统一的数字3作为移动的位数。

凯撒密码的加密解密过程只需要进行移位操作,因此算法简单,但安全性极低,很容易被破解。现如今已经很少在实际生产环境中使用,但对于入门者来说,学习凯撒密码是很好的入门之选。

2. 凯撒加密算法实现

2.1 加密函数 Caesar

我们先从加密函数 Caesar 开始,这个函数的作用是对原文进行加密,生成密文。我们可以先写出基本的算法:

def Caesar(plaintext, shift):

ciphertext = ''

for letter in plaintext:

if letter.isalpha():

num = ord(letter) + shift

if letter.isupper():

if num > ord('Z'):

num -= 26

elif num < ord('A'):

num += 26

elif letter.islower():

if num > ord('z'):

num -= 26

elif num < ord('a'):

num += 26

ciphertext += chr(num)

else:

ciphertext += letter

return ciphertext

其中,plaintext 是原文,shift 是移位的数目。函数首先定义了 ciphertext 变量,用于存储密文。然后通过 for 循环遍历原文中的每个字母,若字母是字母则进行移位操作,否则直接加入到 ciphertext 中。字母的移位操作,主要是通过 ord() 和 chr() 函数实现的。

2.2 移位算法分析

我们再详细解析一下移位算法。针对一个字母 letter,首先通过 ord() 函数将其转化为 ASCII 码。然后将 ASCII 码加上 shift(移位数目),得到加密后的密文数字 num。

接下来的 if else 分支语句中,我们对大写字母和小写字母分别进行处理。对于大写字母,如果 num 超出了大写字母的范围(65~90),那么将 num 减去26,相当于从 A 开始重新计数。对于小写字母同理,只是要判断的范围是 97~122。

最后,我们再将加密后的密文数字 num 通过 chr() 函数转化为字母,加入到 ciphertext 中。函数返回密文。

3. 凯撒解密算法实现

3.1 解密函数 CaesarDecrypt

凯撒密码的解密方案比较简单,只需要将密文向前移位相应的数目即可。移位的数目应与加密时的数目相同。下面我们来编写解密函数 CaesarDecrypt:

def CaesarDecrypt(ciphertext, shift):

plaintext = ''

for letter in ciphertext:

if letter.isalpha():

num = ord(letter) - shift

if letter.isupper():

if num < ord('A'):

num += 26

elif num > ord('Z'):

num -= 26

elif letter.islower():

if num < ord('a'):

num += 26

elif num > ord('z'):

num -= 26

plaintext += chr(num)

else:

plaintext += letter

return plaintext

基本算法与加密函数相同,主要是将加密操作中的 shift 换成了 -shift。

3.2 解密算法分析

解密算法的分析与加密类似,用 ord() 函数将字母转换为 ASCII 码,然后将其减去 shift 后得到明文数字 num。这里不需要考虑是否超出范围的问题,因为向前移位时自然可以跨越字母表的边界,从 Z 回到 A 即可。

最后,我们将明文数字 num 转换为字母并加入到 plaintext 中。函数返回明文。

4. 加解密实例

我们来试一下刚才写的代码:

# 加密测试

plaintext = "Hello World!"

ciphertext = Caesar(plaintext, 3)

print("原文:", plaintext)

print("密文:", ciphertext)

# 解密测试

new_plaintext = CaesarDecrypt(ciphertext, 3)

print("解密后的明文:", new_plaintext)

运行结果是:

原文: Hello World!

密文: Khoor Zruog!

解密后的明文: Hello World!

可以看到,我们的加解密算法均正常运行,加密后的密文可以通过解密算法还原为原文。

5. 总结

凯撒密码是一种简单易懂的加密算法,在学习编程的初学者中应该算是比较常见的一个例子。然而,由于其安全性极低,现实场景中很少使用。本文中,我们通过 Python 实现了凯撒密码的加解密算法,并对其实现过程进行了详细介绍。

在实际场景中,我们应该使用更加严格的加密协议,比如 AES-256、RSA 等。但通过学习凯撒密码,我们对于加密算法的基础原理得到了更深入的了解,有助于我们理解更加高级的加密算法实现。

后端开发标签