编程实现vigenere密码
时间: 2024-04-03 08:12:31 浏览: 92
Cryptography:用 Javascript 编写的 Vigenere Cipher 加密和解密函数
Vigenere密码是一种多字母替换密码,它使用一个密钥(关键字)来对明文进行加密。具体实现如下:
```python
def vigenere_cipher(plaintext, key):
# 生成密文的变量
ciphertext = ""
# 将明文和密钥都转换为大写字母
plaintext = plaintext.upper()
key = key.upper()
# 循环遍历明文中的每个字母
for i in range(len(plaintext)):
# 如果明文中的字符是字母,就执行加密操作
if plaintext[i].isalpha():
# 将明文字符转换为数字(A=0,B=1,...,Z=25)
plaintext_num = ord(plaintext[i]) - ord('A')
# 将密钥字符转换为数字
key_num = ord(key[i % len(key)]) - ord('A')
# 执行加密操作(利用模运算实现循环加密)
ciphertext_num = (plaintext_num + key_num) % 26
# 将加密后的数字转换为字母
ciphertext_char = chr(ciphertext_num + ord('A'))
# 将加密后的字符添加到密文变量中
ciphertext += ciphertext_char
# 如果明文中的字符不是字母,就直接添加到密文变量中
else:
ciphertext += plaintext[i]
# 返回生成的密文
return ciphertext
```
使用示例:
```python
plaintext = "HELLO WORLD"
key = "SECRET"
ciphertext = vigenere_cipher(plaintext, key)
print(ciphertext) # 输出: "SGNNQ YCOSK"
```
解密时,只需用相同的密钥对密文进行解密即可。具体实现如下:
```python
def vigenere_decipher(ciphertext, key):
# 生成明文的变量
plaintext = ""
# 将密文和密钥都转换为大写字母
ciphertext = ciphertext.upper()
key = key.upper()
# 循环遍历密文中的每个字母
for i in range(len(ciphertext)):
# 如果密文中的字符是字母,就执行解密操作
if ciphertext[i].isalpha():
# 将密文字符转换为数字(A=0,B=1,...,Z=25)
ciphertext_num = ord(ciphertext[i]) - ord('A')
# 将密钥字符转换为数字
key_num = ord(key[i % len(key)]) - ord('A')
# 执行解密操作(利用模运算实现循环解密)
plaintext_num = (ciphertext_num - key_num) % 26
# 将解密后的数字转换为字母
plaintext_char = chr(plaintext_num + ord('A'))
# 将解密后的字符添加到明文变量中
plaintext += plaintext_char
# 如果密文中的字符不是字母,就直接添加到明文变量中
else:
plaintext += ciphertext[i]
# 返回生成的明文
return plaintext
```
使用示例:
```python
ciphertext = "SGNNQ YCOSK"
key = "SECRET"
plaintext = vigenere_decipher(ciphertext, key)
print(plaintext) # 输出: "HELLO WORLD"
```
阅读全文