天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 63|回复: 0

一个简单的c++文本加密

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
本文需要的头文件:

#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]

 

 

 

 

一个简单的c++文本加密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 12:32 , Processed in 0.130951 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表