维吉尼亚密码加解密python
时间: 2023-09-01 07:07:56 浏览: 123
维吉尼亚密码是一种基于多表替换加密的算法,它是一种更加高级的凯撒密码。在维吉尼亚密码中,密钥是一个字符串,它被用来对明文进行加密和解密。下面是一个使用Python实现维吉尼亚密码加解密的例子:
```python
def vigenere_encrypt(plaintext, key):
"""
使用维吉尼亚密码加密明文
:param plaintext: 明文字符串
:param key: 密钥字符串
:return: 密文字符串
"""
ciphertext = ""
key_index = 0
for c in plaintext:
if c.isalpha():
shift = ord(key[key_index].upper()) - ord('A')
if c.isupper():
ciphertext += chr((ord(c) + shift - 65) % 26 + 65)
else:
ciphertext += chr((ord(c) + shift - 97) % 26 + 97)
key_index = (key_index + 1) % len(key)
else:
ciphertext += c
return ciphertext
def vigenere_decrypt(ciphertext, key):
"""
使用维吉尼亚密码解密密文
:param ciphertext: 密文字符串
:param key: 密钥字符串
:return: 明文字符串
"""
plaintext = ""
key_index = 0
for c in ciphertext:
if c.isalpha():
shift = ord(key[key_index].upper()) - ord('A')
if c.isupper():
plaintext += chr((ord(c) - shift - 65) % 26 + 65)
else:
plaintext += chr((ord(c) - shift - 97) % 26 + 97)
key_index = (key_index + 1) % len(key)
else:
plaintext += c
return plaintext
```
在这个例子中,`vigenere_encrypt`函数接受明文字符串和密钥字符串作为参数,并返回密文字符串。`vigenere_decrypt`函数接受密文字符串和密钥字符串作为参数,并返回明文字符串。这两个函数都使用了相同的密钥字符串来进行加密和解密操作。
下面是一个使用这些函数进行加解密的例子:
```python
plaintext = "HELLO WORLD"
key = "SECRET"
ciphertext = vigenere_encrypt(plaintext, key)
print(ciphertext) # 输出:"TIGER ZXPSO"
decrypted_text = vigenere_decrypt(ciphertext, key)
print(decrypted_text) # 输出:"HELLO WORLD"
```
在这个例子中,我们使用了一个简单的明文字符串和一个密钥字符串来进行加解密操作。输出结果表明,我们成功地加密和解密了这个字符串,而且密文和明文都和预期的一样。
阅读全文