维吉尼亚密码加密 的c++代码实现
时间: 2024-09-13 19:18:14 浏览: 40
维吉尼亚密码是一种经典的加密方法,通过使用一个关键词对原始文本进行加密。关键词重复地覆盖在原始文本上,每个字母根据关键词中相应位置的字母来确定其加密位置,加密后的字母位置是原始字母位置和关键词字母位置的和模字母表长度的结果。
以下是一个简单的C++代码实现,用于演示如何使用维吉尼亚密码对字符串进行加密:
```cpp
#include <iostream>
#include <string>
#include <vector>
// 函数:将字符转换为对应的数字
int charToInt(char c) {
if (c >= 'A' && c <= 'Z') {
return c - 'A';
}
return c - 'a'; // 对于小写字母
}
// 函数:将数字转换回字符
char intToChar(int i) {
if (i >= 0 && i <= 25) {
return 'A' + i;
}
return 'a' + i; // 对于小写字母
}
// 函数:对字符串使用维吉尼亚密码进行加密
std::string encryptVigenere(const std::string &text, const std::string &key) {
std::string encryptedText;
int keyLen = key.length();
int textLen = text.length();
std::vector<int> keyInt(keyLen);
// 将关键词转化为数字形式
for (int i = 0; i < keyLen; ++i) {
keyInt[i] = charToInt(key[i]);
}
// 加密文本
for (int i = 0; i < textLen; ++i) {
int textChar = charToInt(text[i]);
int keyChar = keyInt[i % keyLen];
encryptedText += intToChar((textChar + keyChar) % 26);
}
return encryptedText;
}
int main() {
std::string text = "HELLO";
std::string key = "KEY";
std::string encrypted = encryptVigenere(text, key);
std::cout << "Encrypted text: " << encrypted << std::endl;
return 0;
}
```
这段代码首先定义了两个辅助函数`charToInt`和`intToChar`,用于在字符和它们对应的字母表索引之间转换。然后定义了`encryptVigenere`函数,它接受原文和密钥作为参数,返回加密后的字符串。最后在`main`函数中测试了这段加密代码。
请注意,上述代码假设输入的文本和密钥都是大写字母或小写字母,且没有进行错误检查。在实际应用中,你可能需要添加额外的逻辑来处理不同字符集、大小写混合的情况以及输入验证。
阅读全文