前言
好久没写文了,今天更新几个加密算法,均采用C 实现
系列文章
- DH算法
古典加密
凯撒密码
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。编写代码为右移3位
不难得到,他的加密公式为:CaesarCipher(a) = (a 3) mod 26
解密公式为:CaesarCipher(a) = (a 23)mod 26
代码语言:javascript复制#include <iostream>
#include <string>
using namespace std;
string caesarEncrypt(const string& message, int shift) {
string encryptedMessage = "";
for (char c : message) {
if (isalpha(c)) {
char shiftedChar = (toupper(c) - 'A' shift) % 26 'A';
encryptedMessage = shiftedChar;
}
else {
encryptedMessage = c;
}
}
return encryptedMessage;
}
int main() {
string message;
int shift;
cout << "输入: ";
getline(cin, message);
cout << "输入移位:";
cin >> shift;
string encryptedMessage = caesarEncrypt(message, shift);
cout << "加密后字符串:" << encryptedMessage << endl;
return 0;
}
解密和加密差不多,上面也给出公式了,还请读者自己实现一下。
单表代换密码
这个也比较简单,就是把明文中的每个字母替换为固定的密文字母来进行加密。
代码语言:javascript复制#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
string monoalphabeticEncrypt(const string& message, const unordered_map<char, char>& substitutionTable) {
string encryptedMessage = "";
for (char c : message) {
if (isalpha(c)) {
char substitutedChar = substitutionTable.at(toupper(c));
encryptedMessage = islower(c) ? tolower(substitutedChar) : substitutedChar;
}
else {
encryptedMessage = c;
}
}
return encryptedMessage;
}
int main() {
string message;
unordered_map<char, char> substitutionTable;
// 初始化替换表
substitutionTable['A'] = 'Q';
substitutionTable['B'] = 'W';
substitutionTable['C'] = 'E';
cout << "输入 ";
getline(cin, message);
string encryptedMessage = monoalphabeticEncrypt(message, substitutionTable);
cout << "输出 " << encryptedMessage << endl;
return 0;
}
最后
如果本文对你有所帮助,还请三连支持一下博主!