维吉尼亚密码解密的Python实现
维吉尼亚密码是一种对称密钥密码,它使用字母表中的字母进行加密,具有较高的安全性。虽然这种密码在现代已不常用,但它仍然是密码学学习中的经典案例。本文将详细介绍维吉尼亚密码的基本原理,并通过Python实现其解密功能。
维吉尼亚密码的基本原理
维吉尼亚密码的工作原理是通过一个密钥对原文进行加密。假设原文为 "HELLO" ,密钥为 "KEY"。加密过程如下:
-
重复密钥,使其长度和原文相同。
原文: H E L L O 密钥: K E Y K E
-
使用字母表将每个字母转化为数字(A=0, B=1, …, Z=25),然后将对应的数字相加,最后取模 26。
(H(7) + K(10)) % 26 = R(17) (E(4) + E(4)) % 26 = I(8) (L(11) + Y(24)) % 26 = J(9) (L(11) + K(10)) % 26 = V(21) (O(14) + E(4)) % 26 = S(18)
此时加密后的结果为 "RIJVS"。
解密过程
解密则是一个逆过程,利用密钥将密文中的每个字符转换为原文字符。我们同样将密钥延长到与密文相同长度,然后进行减法运算,最后取模 26。
维吉尼亚密码解密的Python实现
下面是一个简单的维吉尼亚密码解密的Python实现示例:
def vigenere_decrypt(ciphertext, key):
decrypted_text = []
key_length = len(key)
key_as_int = [ord(i) - ord('A') for i in key.upper()]
cipher_as_int = [ord(i) - ord('A') for i in ciphertext.upper()]
for i in range(len(cipher_as_int)):
value = (cipher_as_int[i] - key_as_int[i % key_length]) % 26
decrypted_text.append(chr(value + 65))
return ''.join(decrypted_text)
ciphertext = "RIJVS"
key = "KEY"
decrypted_message = vigenere_decrypt(ciphertext, key)
print(f"解密后的消息: {decrypted_message}")
代码解析
- 首先,
vigenere_decrypt
函数接受密文和密钥作为参数。 key_as_int
和cipher_as_int
分别将密钥和密文从字母形式转换为整数形式。- 然后,循环遍历密文,对每个字符进行解密,最终得到原文。
使用示例
在上述代码中,我们使用密文 "RIJVS" 进行解密,并使用密钥 "KEY"。运行代码后,会输出:
解密后的消息: HELLO
如预期,解密操作成功恢复了原文。
总结
维吉尼亚密码作为一种传统的加密方法,在密码学的历史中占有一席之地。通过本文的详细介绍和Python实现示例,相信读者对维吉尼亚密码的理论和实际操作有了更深入的理解。
以下是我为维吉尼亚密码解密过程制作的旅行图,展示了整个流程:
journey
title 维吉尼亚密码解密流程
section 准备工作
准备密文: 5: Me
准备密钥: 5: Me
section 解密过程
按位计算: 5: Me
转换为字母: 5: Me
输出原文: 5: Me
维吉尼亚密码的解密过程不仅是一个数学问题,也是编程思维的一次挑战。希望本篇文章能激励更多的读者深入探索密码学的世界,并动手实践,解决实际问题。