维吉尼亚密码加解密py
时间: 2023-09-04 18:16:07 浏览: 177
可以使用Python实现维吉尼亚密码的加解密功能。
加密:
```python
def vigenere_encrypt(key, plaintext):
"""
维吉尼亚密码加密函数
:param key: 密钥
:param plaintext: 明文
:return: 密文
"""
key_len = len(key)
key_idx = 0
ciphertext = ""
for ch in plaintext:
if ch.isalpha(): # 只加密字母
k = ord(key[key_idx]) - ord('a')
p = ord(ch) - ord('a')
c = chr((k + p) % 26 + ord('a'))
ciphertext += c
key_idx = (key_idx + 1) % key_len
else:
ciphertext += ch
return ciphertext
```
解密:
```python
def vigenere_decrypt(key, ciphertext):
"""
维吉尼亚密码解密函数
:param key: 密钥
:param ciphertext: 密文
:return: 明文
"""
key_len = len(key)
key_idx = 0
plaintext = ""
for ch in ciphertext:
if ch.isalpha(): # 只解密字母
k = ord(key[key_idx]) - ord('a')
c = ord(ch) - ord('a')
p = chr((c - k + 26) % 26 + ord('a'))
plaintext += p
key_idx = (key_idx + 1) % key_len
else:
plaintext += ch
return plaintext
```
使用示例:
```python
key = "secret" # 密钥
plaintext = "hello, world!" # 明文
ciphertext = vigenere_encrypt(key, plaintext) # 加密
print(ciphertext) # 输出:khoor, zruog!
decoded_plaintext = vigenere_decrypt(key, ciphertext) # 解密
print(decoded_plaintext) # 输出:hello, world!
```
注意:上述代码仅用于学习和研究目的,请勿用于非法用途。
阅读全文