|
本文需要的头文件:
#include<iostream>
#include<string>
#include<cstring>
#include<fstream>
接下来,就是原理了
1、你要是要加密,就要有个字典啊,不然就要凭空将字母进行加密啊
2、有了字典,就要有加密的方法啊,你不会想要让字典白白写在那里的吧
3、输出文本,不然加密有什么用
4、要是想再让程序好一点,就可以再加一个写入文本
开始实现
先是创建一个字典,不需要太多的字符,将各种常用的写进来就行
char dictionary[] = { 'a',
'b','c','d','e','f','g','h',
'i','j','k','l','m','n','o',
'p','q','r','s','t','u','v',
'w','x','y','z','A','B','C',
'D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q',
'R','S','T','U','V','W','X',
'Y','Z','1','2','3','4','5',
'6','7','8','9','!','@','#',
'$','%','^','<','`','~','(',
'*','&','一','二','三','四',
'五','六','七','八','九','十',
}; //将各种常用的字符写在数组里
这里可能有很多人担心下标会越界,其实不用担心,因为在字符数组的最后有一些在文本中不常用的符号,可以用来凑数(在数组里我没有输入很多的中文常用字,一是因为我要输入的话要很长时间,二是我的电脑实在不行啊)
字符数组弄好了,还差些什么呢?加密的方法啊!
在这里,我用偏移字符来进行加密。
string text;
cout << "请输入加密的文本" << endl;
cin >> text;
for (int i = 0; i < text.length(); i++) { //将字符串遍历
for (int j = 6; j < 75; j++) { //将字符数组遍历
if (text[i] == dictionary[j]) { //将字符串下标为i的字符与字符数组下标为j的字符比较
//如果字符一样,就将字符向右偏移5个索引(索引加5)
text[i] = dictionary[j + 5];
j = 100; //j=100就是退出了第二个for循环,因为继续运行要j<75
}
}
}
cout << text << endl;
好了,加密方法已经弄完了,接下来是解密了
我只需要将现在的text里的每一个字符在字符数组里的索引向左偏移5个就行了
for (int i = 0; i < text.length(); i++) { //将字符串遍历
for (int j = 6; j < 75; j++) { //将字符数组遍历
if (text[i] == dictionary[j]) { //将字符串下标为i的字符与字符数组下标为j的字符比较
//如果字符一样,就将字符向左偏移5个索引(索引减5)
text[i] = dictionary[j - 5];
j = 100; //j=100就是退出了第二个for循环,因为继续运行要j<75
}
}
}
cout << text << endl;
有没有感觉很像啊
其实文本加密就只是将字典里的字符偏移索引,达到加密的效果。
如果还想将程序变得更好,就可以加入文本写入
特别简单
ofstream file;
file.open("text.txt");
file<<text;
1
2
3
好了,大功告成了
接下来将程序整合一下
#include<iostream>
#include<string>
#include<cstring>
#include<fstream>
using namespace std;
int main(){
char dictionary[] = { 'a',
'b','c','d','e','f','g','h',
'i','j','k','l','m','n','o',
'p','q','r','s','t','u','v',
'w','x','y','z','A','B','C',
'D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q',
'R','S','T','U','V','W','X',
'Y','Z','1','2','3','4','5',
'6','7','8','9','!','@','#',
'$','%','^','<','`','~','(',
'*','&','一','二','三','四',
'五','六','七','八','九','十',
}; //将各种常用的字符写在数组里
string text;
cout << "请输入加密的文本" << endl;
cin >> text;
for (int i = 0; i < text.length(); i++) { //将字符串遍历
for (int j = 6; j < 75; j++) { //将字符数组遍历
if (text[i] == dictionary[j]) { //将字符串下标为i的字符与字符数组下标为j的字符比较
//如果字符一样,就将字符向右偏移5个索引(索引加5)
text[i] = dictionary[j + 5];
j = 100; //j=100就是退出了第二个for循环,因为继续运行要j<75
}
}
}
cout << text << endl;
for (int i = 0; i < text.length(); i++) { //将字符串遍历
for (int j = 6; j < 75; j++) { //将字符数组遍历
if (text[i] == dictionary[j]) { //将字符串下标为i的字符与字符数组下标为j的字符比较
//如果字符一样,就将字符向左偏移5个索引(索引减5)
text[i] = dictionary[j - 5];
j = 100; //j=100就是退出了第二个for循环,因为继续运行要j<75
}
}
}
cout << text << endl;
ofstream file;
file.open("text.txt");
file<<text;
}
一个c++的简单文本加密就这样完成了
接下来可以自己去渐渐完善这一个程序,例如加入读取文本文件并加密等
[code]原文链接:https://blog.csdn.net/ming3421/article/details/115409009[/code] |
|