封装一个类,实现凯撒加密和解密算法,使用该类实例化一个对象,使用该对象进行字符串的加密和解密。
实验要求如下。
(1) 恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后,被替换成密文。
(2) 设计凯撒密码类的UML图。
(3) 实现凯撒密码类。
(4) 实现凯撒加密程序。
(5) 制定测试计划。制定测试计划,测试计划中至少应包含3个测试用例,充分测试在不同秘钥、不同明文的情况下,程序的功能
代码实现
class CaesarCipher:
def __init__(self, key):
self.key = key
self.chars = [
'!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~' ,' '
]
self.char_map = {char: i for i, char in enumerate(self.chars)}
def encrypt(self, plaintext):
jiami = ""
for char in plaintext:
if char in self.char_map:
index = (self.char_map[char] + self.key) % len(self.chars)
jiami += self.chars[index]
else:
jiami += char
return jiami
def decrypt(self, ciphertext):
jiemi = ""
for char in ciphertext:
if char in self.char_map:
index = (self.char_map[char] - self.key) % len(self.chars)
jiemi += self.chars[index]
else:
jiemi += char
return jiemi
while 1:
key = int(input("请输入密钥"))
test = input("请输入明文")
cipher = CaesarCipher(key)
jiami = cipher.encrypt(test)
print("加密:", jiami)
jiemi = cipher.decrypt(jiami)
print("解密:", jiemi)