如何用Python实现维吉尼亚加密算法,并确保加密后的密文能够正确解密回原始明文?
时间: 2024-11-15 08:18:21 浏览: 15
维吉尼亚加密算法是一种经典的多表代换密码,能够通过Python实现。以下是如何实现维吉尼亚加密算法的详细步骤:
参考资源链接:[Python编程实现维吉尼亚加密算法详解](https://wenku.csdn.net/doc/7k363eyjaz?spm=1055.2569.3001.10343)
首先,我们需要定义两个核心函数:一个用于加密,另一个用于解密。密钥的每个字母都会为明文中的相应字母指定一个特定的凯撒密码表。我们将使用模运算来处理字符索引,并确保结果在字符集中(通常是A-Z)。
以下是Python代码实现:
```python
def encrypt(plaintext, key):
# 移除密钥中非字母字符并转换为大写
key = ''.join(filter(str.isalpha, key)).upper()
# 初始化密文字符串
ciphertext = []
# 字母编码
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 明文和密钥的长度
text_len = len(plaintext)
key_len = len(key)
# 对每个明文字符进行加密
for i in range(text_len):
# 计算字符在字母表中的位置
text_char = alphabet.index(plaintext[i])
# 计算密钥字符在字母表中的位置
key_char = alphabet.index(key[i % key_len])
# 加密计算,确保索引为正
encrypted_char = alphabet[(text_char + key_char) % 26]
# 添加到密文结果
ciphertext.append(encrypted_char)
# 将密文字符列表连接成字符串并返回
return ''.join(ciphertext)
def decrypt(ciphertext, key):
key = ''.join(filter(str.isalpha, key)).upper()
plaintext = []
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
text_len = len(ciphertext)
key_len = len(key)
# 对每个密文字符进行解密
for i in range(text_len):
text_char = alphabet.index(ciphertext[i])
key_char = alphabet.index(key[i % key_len])
# 解密计算,确保索引为正
decrypted_char = alphabet[(text_char - key_char) % 26]
plaintext.append(decrypted_char)
return ''.join(plaintext)
# 示例使用
key = 'VIGENERECIPHER'
plaintext = 'ATTACKATDAWN'
ciphertext = encrypt(plaintext, key)
decrypted_text = decrypt(ciphertext, key)
print(f
参考资源链接:[Python编程实现维吉尼亚加密算法详解](https://wenku.csdn.net/doc/7k363eyjaz?spm=1055.2569.3001.10343)
阅读全文