- gf24240 的博客
《梦溪笔谈·C++》卷二十四:加密训练Ⅲ
- 2025-6-4 13:01:13 @
加密训练三
使用方法:
- 输入密码(初始密码为
bcoi
); - 选择加密或解密,
1
为加密,2
为解密 - 输入要加密或解密的内容
CTRL+Z
结束
#include <bits/stdc++.h>
#include <conio.h>
using namespace std;
map <char, char> atob = {{'q', 'p'},{'w', 'q'},{'e', 'w'},{'r', 'e'},{'t', 'r'},{'y', 't'},{'u', 'y'},{'i', 'u'},{'o', 'i'},{'p', 'o'},{'a', 'l'},{'s', 'a'},{'d', 's'},{'f', 'd'},{'g', 'f'},{'h', 'g'},{'j', 'h'},{'k', 'j'},{'l', 'k'},{'z', 'm'},{'x', 'z'},{'c', 'x'},{'v', 'c'},{'b', 'v'},{'n', 'b'},{'m', 'n'},{'1', '!'},{'2', '@'},{'3', '#'},{'4', '$'},{'5', '%'},{'6', '^'},{'7', '&'},{'8', '*'},{'9', '('},{'0', ')'}};
map <char, char> btoa = {{'p', 'q'}, {'q', 'w'}, {'w', 'e'}, {'e', 'r'}, {'r', 't'},{'t', 'y'}, {'y', 'u'}, {'u', 'i'}, {'i', 'o'}, {'o', 'p'},{'l', 'a'}, {'a', 's'}, {'s', 'd'}, {'d', 'f'}, {'f', 'g'},{'g', 'h'}, {'h', 'j'}, {'j', 'k'}, {'k', 'l'},{'m', 'z'}, {'z', 'x'}, {'x', 'c'}, {'c', 'v'}, {'v', 'b'},{'b', 'n'}, {'n', 'm'},{'!', '1'}, {'@', '2'}, {'#', '3'}, {'$', '4'}, {'%', '5'},{'^', '6'}, {'&', '7'}, {'*', '8'}, {'(', '9'}, {')', '0'}};
bool readpass();
char acheb(char c);
char bchea(char c);
int main()
{
readpass();int cheio;
cout << "\n1.加密 2.解密:";
cin >> cheio;
char c;
while ((c = getchar()) != EOF)
cout << (cheio == 1 ? acheb(c) : bchea(c));
return 0;
}
bool readpass()
{
cout << "输入密码: ";
string cinpassword;
char c;
while((c = _getch()) != '\r')
{
cinpassword += c;
cout << '.';
}
string relpassword = "";
for (int i = 0; i < cinpassword.size(); i++)
{
relpassword += acheb(cinpassword[i]);
}
if( relpassword != "vxiu")
{
for (int i = 1; i <= 1e10; i++)cout << "密码错误!\n";
exit(0);
}
}
char acheb(char c)
{
if (isupper(c))return (char)toupper(atob[tolower(c)]);
else if (atob.count(c))return atob[c];
else return c;
}
char bchea(char c)
{
if (isupper(c))return (char)toupper(btoa[tolower(c)]);
else if (btoa.count(c))return btoa[c];
else return c;
}