假设词汇表为: • ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg hijklmnopqrstuvwxyz1234567890 !?., 请分别编写python程序,实现凯撒密码和维 吉尼亚密码。
时间: 2024-09-22 15:06:03 浏览: 35
凯撒密码是一种简单的替换加密技术,其中字母按照固定位移进行替换。在Python中,我们可以创建两个函数,`caesar_cipher`用于凯撒密码的加密,`reverse_caesar_cipher`用于解密。这里是一个简单的实现:
```python
def caesar_cipher(text, shift):
encrypted_text = ""
for char in text:
if char.isalpha():
# 处理大写字母和小写字母
shifted_index = (ord(char.lower()) - ord('a') + shift) % 26
if char.islower():
encrypted_text += chr(shifted_index + ord('a'))
else:
encrypted_text += chr(shifted_index + ord('A'))
else:
encrypted_text += char
return encrypted_text
def reverse_caesar_cipher(encrypted_text, shift):
return caesar_cipher(encrypted_text, -shift)
# 示例
plaintext = "Hello, World!"
shift = 3
encrypted = caesar_cipher(plaintext, shift)
decrypted = reverse_caesar_cipher(encrypted, shift)
print(f"Plaintext: {plaintext}")
print(f"Ciphertext: {encrypted}")
print(f"Decrypted: {decrypted}")
```
维吉尼亚密码(Vigenère cipher),也称为多元替换密码,需要一个密钥,每个字符都会基于这个密钥循环替换。由于其复杂性和长度,我们需要稍微复杂的代码来处理:
```python
def vigenere_cipher(text, key, alphabet):
encrypted_text = ""
key_length = len(key) # 如果文本比密钥长,循环密钥
for i in range(len(text)):
char = text[i]
key_char = key[i % key_length] # 循环密钥取对应字符
shift = alphabet.index(key_char)
if char.isalpha():
encrypted_text += alphabet[(alphabet.index(char) + shift) % len(alphabet)]
else:
encrypted_text += char
return encrypted_text
def decrypt_vigenere_cipher(ciphertext, key, alphabet):
return vigenere_cipher(ciphertext, key, alphabet)
# 示例
plaintext = "Hello, World!"
key = "Key123"
vigenere_alphabet = string.ascii_letters + "1234567890 !?.,"
encrypted = vigenere_cipher(plaintext, key, vigenere_alphabet)
decrypted = decrypt_vigenere_cipher(encrypted, key, vigenere_alphabet)
print(f"Plaintext: {plaintext}")
print(f"Ciphertext: {encrypted}")
print(f"Decrypted: {decrypted}")
```
这两个示例都假设了字母表包含所有的英文字符以及数字和常见标点符号。