c++生成维吉尼亚加密解密
时间: 2024-12-16 16:29:20 浏览: 15
维吉尼亚密码(Vigenère cipher)是一种古典的移位密码技术,通过使用明文和密钥相加(模26运算)来加密。在C++中,你可以创建一个简单的维吉尼亚加密和解密函数。首先,你需要准备两个字符串:一个是原始文本(明文),另一个是密钥。
下面是基本的实现步骤:
```cpp
#include <iostream>
#include <string>
// 加法表,对应字母A-Z
const std::string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string encrypt_vigenere(const std::string& plaintext, const std::string& key) {
std::string ciphertext;
for (size_t i = 0; i < plaintext.length(); ++i) {
if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') { // 处理大写字母
int shift = ALPHABET.find(key[i % key.length()]) - ALPHABET.find('A');
ciphertext += ALPHABET[(plaintext[i] - 'A' + shift) % 26 + 'A'];
} else if (plaintext[i] >= 'a' && plaintext[i] <= 'z') { // 处理小写字母
int shift = ALPHABET.find(key[i % key.length()]) - ALPHABET.find('a');
ciphertext += ALPHABET[(plaintext[i] - 'a' + shift) % 26 + 'a'];
} else { // 非字母字符保持不变
ciphertext += plaintext[i];
}
}
return ciphertext;
}
std::string decrypt_vigenere(const std::string& ciphertext, const std::string& key) {
return encrypt_vigenere(ciphertext, key); // 因为解密只需反向操作,所以实际上是对称的
}
int main() {
std::string plaintext = "Hello, World!";
std::string key = "Key12345";
std::string encrypted = encrypt_vigenere(plaintext, key);
std::cout << "Encrypted: " << encrypted << "\n";
std::string decrypted = decrypt_vigenere(encrypted, key);
std::cout << "Decrypted: " << decrypted << "\n";
return 0;
}
```
阅读全文