维吉尼亚(Vigenere)密码
时间: 2025-01-05 19:12:41 浏览: 3
### 维吉尼亚密码简介
维吉尼亚密码是一种多表替换加密方法,属于古典密码学的一部分。该密码通过使用一个关键词来改变字母表的位置,从而实现对消息的加密和解密[^1]。
#### 加密原理
在加密过程中,发送方会选取一段明文以及一个密钥字符串。对于每一个字符,计算其对应的密钥位置上的字符,并按照特定的方式偏移原字符得到新的字符形成密文。具体来说:
- 明文字母加上密钥字母对应数值后的模26运算结果作为新字母索引;
- 如果遇到非字母字符,则保持不变直接加入到最终输出中;
```python
def encrypt_vigenere(plaintext, key):
encrypted_text = []
key_index = 0
for char in plaintext.upper():
if 'A' <= char <= 'Z':
shift = ord(key[key_index % len(key)].upper()) - ord('A')
new_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
encrypted_text.append(new_char)
key_index += 1
else:
encrypted_text.append(char)
return ''.join(encrypted_text).lower()
```
#### 解密原理
接收者拥有相同的密钥,在接收到密文之后可以反向操作恢复原始信息。即减去相应位数上由密钥决定的变化量即可还原成原来的明文形式。
```python
def decrypt_vigenere(ciphertext, key):
decrypted_text = []
key_index = 0
for char in ciphertext.upper():
if 'A' <= char <= 'Z':
shift = ord(key[key_index % len(key)].upper()) - ord('A')
original_char = chr((ord(char) - ord('A') - shift) % 26 + ord('A'))
decrypted_text.append(original_char)
key_index += 1
else:
decrypted_text.append(char)
return ''.join(decrypted_text).lower()
```
#### 历史背景
维吉尼亚密码得名于法国外交官Blaise de Vigenère,尽管这种类型的密码实际上是由意大利学者Giovan Battista Bellaso发明并首次描述出来的。它被认为是第一个实用性的多项式代换密码之一,因为在此之前大多数简单的单表替代很容易被频率分析破解。而这种方法大大增加了破译难度,直到计算机时代才有了有效的攻击手段[^2]。
阅读全文