维吉尼亚密码python头歌
时间: 2025-01-05 14:19:51 浏览: 5
### 使用 Python 实现维吉尼亚密码
#### 维吉尼亚密码简介
维吉尼亚密码是一种多表替换密码,利用一组凯撒密码来加密消息。这种加密方法通过重复使用一个关键词作为密钥,并将其应用于明文中每一个字符的位置偏移量。
#### 加密过程详解
为了实现该算法,在Python中可以通过定义两个函数分别处理加密和解密操作。下面展示了一个具体的例子:
```python
def repeat_key_to_match_length(key, text):
"""将给定的键重复直到匹配文本长度"""
quotient, remainder = divmod(len(text), len(key))
extended_key = key * quotient + key[:remainder]
return ''.join([c.upper() for c in extended_key])
def vigenere_encrypt(plaintext, keyword):
"""基于提供的关键字对纯文本进行Vigenère加密."""
plaintext = ''.join(filter(str.isalpha, plaintext)).upper()
keyword = repeat_key_to_match_length(keyword, plaintext)
encrypted_chars = []
for i, char in enumerate(plaintext):
shift_amount = ord(keyword[i]) - ord('A')
shifted_char_index = (ord(char) - ord('A') + shift_amount) % 26
encrypted_chars.append(chr(shifted_char_index + ord('A')))
return "".join(encrypted_chars)
def vigenere_decrypt(ciphertext, keyword):
"""基于提供的关键字对已加密的文字执行Vigenère解码."""
ciphertext = ''.join(filter(str.isalpha, ciphertext)).upper()
keyword = repeat_key_to_match_length(keyword, ciphertext)
decrypted_chars = []
for i, char in enumerate(ciphertext):
shift_amount = ord(keyword[i]) - shift_amount) % 26
decrypted_chars.append(chr(original_char_index + ord('A')))
return "".join(decrypted_chars).lower()
# 测试案例
if __name__ == "__main__":
message = "hello world"
secret_word = "key"
cipher_text = vigenere_encrypt(message, secret_word)
print(f"Cipher Text: {cipher_text}")
plain_text = vigenere_decrypt(cipher_text, secret_word)
print(f"Plain Text :{plain_text}")
```
上述代码实现了完整的维吉尼亚密码编码与解码流程[^1]。`repeat_key_to_match_length()` 函数用于调整密钥字符串使其适应输入的消息长度;而 `vigenere_encrypt()` 和 `vigenere_decrypt()` 则负责实际的数据转换逻辑。
阅读全文