加解密处理 |
1、系统的基本功能
编写一个对文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可以将选取内容的每个字符依次反复加上”49632873”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(既N%122).解密与加密的顺序相反。 2、要求及提示2.1 程序执行过程(1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。 (2)显示菜单: 1. 设置加密方法 2. 加密 3. 解密 4. 显示原始文件和解密文件 (3)选择菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;显示是将文件在屏幕上显示出来,供人工校对。 2.2数据结构1 加密方法用结构表示 struct password { char ps[10]; long l; long wd;} 2定义原始文件sourse.txt、加密文件result.txt和还原文件recall.txt 3 程序模块及函数功能: (1) 在屏幕上显示文件 void printtxt(); (2) 加密void encode(); (3) 解密void decode(); (4) 文件比较void cmptxt(); 2.2 算法提示(1)加密时,每个字符依次反复加上”49632873”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122). 例如:加密the (t)116+4,(h)104+9,(e)101+6 变为xqk (2) 解密:解密过程与加密过程的顺序正好相反,即从第一个字符开始,每个字符依次反复减去”49632873”中的数字,若执行减法后得到一个负数,则把这个负数加122然后取余,即 (N+122)%122, 其中N为负数。 例如:把xqk解密 (x) 120-4 (q)111-9 (k) 107-6 变为 the 2.3 其他要求(1)变量、函数命名符合规范。 (2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。 (3)程序的层次清晰,可读性强。 3 开发环境 可以选择TC2.0、TC3.0、VC++6.0等开发环境。 |
程序设计——加解密处理
答案:1 悬赏:80 手机版
解决时间 2021-05-10 21:18
- 提问者网友:箛茗
- 2021-05-10 02:10
最佳答案
- 五星知识达人网友:行路难
- 2021-05-10 03:35
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
struct password
{
char ps[10];
long l;
long wd;
}password;
char *s=new char[100];
void set()
{
cout<<endl<<"输入加密字符串:";
cin>>password.ps;
cout<<endl<<"输入加密间隔字节数:";
cin>>password.l;
cout<<endl<<"输入加密字节数:";
cin>>password.wd;
}
void printtxt()
{
ifstream fs1(s,ios::nocreate);//以输入方式打开文件
ifstream fs2("result.txt");
ifstream fs3("recall.txt");
char c;
cout<<endl<<"原始文件:";
if(!fs1)
{
cout<<s;
}
else
{
while(fs1.get())
cout<<c;
}
cout<<endl;;
cout<<endl<<"加密文件:";
while(fs2.get())
cout<<c;
cout<<endl;
cout<<endl<<"解密文件:";
while(fs3.get())
cout<<c;
cout<<endl;
fs1.close();//关闭文件
fs2.close();
fs3.close();
}
void encode()
{
int n=strlen(password.ps);
char N;
char c;
ofstream out("result.txt");
ifstream fs(s,ios::nocreate);
if(!fs) //文件为空则为对字符串s进行加密
{
int m=strlen(s);
for(int i=0;i<m;i++)
{
if(i%password.l==0)
{
static int a=0;
if(a<password.wd)
{
N=s[i]+password.ps[a%n]-48;
if(N>122)
{
N=N%122;
}
out.put(N);
a++;
}
else out.put(s[i]);
}
else out.put(s[i]);
}
}
else//文件非空,为对文件进行加密
{
for(int i=0;fs.get();i++)
{
if(i%password.l==0)
{
static int a=0;
if(a<password.wd)
{
N=c+password.ps[a%n]-48;
if(N>122)
{
N=N%122;
}
out.put(N);
a++;
}
else out.put(N);
}
else out.put(N);
}
}
cout<<endl<<"加密成功!"<<endl;
out.close();
fs.close();
}
void cmptxt()
{
ifstream fs1(s,ios::nocreate);
ifstream fs2("recall.txt");
char c1,c2;
if(!fs1) //fs1文件空,为对字符串和fs2之间比较
{
for(int i=0;s[i];i++)
{
fs2.get(c2);
if(s[i]!=c2) //若出现不同的字符则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
if(fs2.get(c2)) //若字符串s已被判断完毕但文件fs2中未终止则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
else //对两个文件进行比较
{
while(fs1.get(c1)&&fs2.get(c2))
{
if(c1!=c2) //若出现不同字符则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
if(fs1.get(c1)||fs2.get(c2)) //若已有一个文件到达结尾但另一文件中仍有字符则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
cout<<endl<<"解密成功!"<<endl;
fs1.close();
fs2.close();
}
void decode()
{
ofstream out("recall.txt");
ifstream fs("result.txt");
char c,N;
int n=strlen(password.ps);
for(int i=0;fs.get();i++)
{
if(i%password.l==0)
{
static int a=0;
if(a<password.wd)
{
N=c-(password.ps[a%n]-48);
if(N<0)
{
N=(N+122)%122;
out.put(N);
}
else
{
if(N==0) out.put('z');
else out.put(N);
}
a++;
}
else out.put(N);
}
else out.put(N);
}
fs.close();
out.close();
cmptxt();
}
void main()
{
cout<<"请输入需要加密的内容"<<endl;
cin>>s;
int a=0;
while (a!=5)
{
cout<<endl<<"★★★选择菜单★★★"<<endl;//显示提示的信息
cout<<"1.设置加密方法"<<endl;
cout<<"2.加密"<<endl;
cout<<"3.解密"<<endl;
cout<<"4.显示原始文件和解密文件"<<endl;
cout<<"5.退出"<<endl;
cout<<"请选择:";
cin>>a;
switch(a)
{
case 1://用单条件多选择语句实现调用与循环
set();
cout<<endl;
break;
case 2:
encode();
cout<<endl;
break;
case 3:
decode();
cout<<endl;
break;
case 4:
printtxt();
cout<<endl;
break;
case 5:
cout<<endl<<"谢谢使用!"<<endl<<endl;
break;
default:
cout<<endl<<"输入错误 请再次输入"<<endl;
}
}
}
有不会的直接QQ联系我吧 736092703
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
struct password
{
char ps[10];
long l;
long wd;
}password;
char *s=new char[100];
void set()
{
cout<<endl<<"输入加密字符串:";
cin>>password.ps;
cout<<endl<<"输入加密间隔字节数:";
cin>>password.l;
cout<<endl<<"输入加密字节数:";
cin>>password.wd;
}
void printtxt()
{
ifstream fs1(s,ios::nocreate);//以输入方式打开文件
ifstream fs2("result.txt");
ifstream fs3("recall.txt");
char c;
cout<<endl<<"原始文件:";
if(!fs1)
{
cout<<s;
}
else
{
while(fs1.get())
cout<<c;
}
cout<<endl;;
cout<<endl<<"加密文件:";
while(fs2.get())
cout<<c;
cout<<endl;
cout<<endl<<"解密文件:";
while(fs3.get())
cout<<c;
cout<<endl;
fs1.close();//关闭文件
fs2.close();
fs3.close();
}
void encode()
{
int n=strlen(password.ps);
char N;
char c;
ofstream out("result.txt");
ifstream fs(s,ios::nocreate);
if(!fs) //文件为空则为对字符串s进行加密
{
int m=strlen(s);
for(int i=0;i<m;i++)
{
if(i%password.l==0)
{
static int a=0;
if(a<password.wd)
{
N=s[i]+password.ps[a%n]-48;
if(N>122)
{
N=N%122;
}
out.put(N);
a++;
}
else out.put(s[i]);
}
else out.put(s[i]);
}
}
else//文件非空,为对文件进行加密
{
for(int i=0;fs.get();i++)
{
if(i%password.l==0)
{
static int a=0;
if(a<password.wd)
{
N=c+password.ps[a%n]-48;
if(N>122)
{
N=N%122;
}
out.put(N);
a++;
}
else out.put(N);
}
else out.put(N);
}
}
cout<<endl<<"加密成功!"<<endl;
out.close();
fs.close();
}
void cmptxt()
{
ifstream fs1(s,ios::nocreate);
ifstream fs2("recall.txt");
char c1,c2;
if(!fs1) //fs1文件空,为对字符串和fs2之间比较
{
for(int i=0;s[i];i++)
{
fs2.get(c2);
if(s[i]!=c2) //若出现不同的字符则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
if(fs2.get(c2)) //若字符串s已被判断完毕但文件fs2中未终止则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
else //对两个文件进行比较
{
while(fs1.get(c1)&&fs2.get(c2))
{
if(c1!=c2) //若出现不同字符则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
if(fs1.get(c1)||fs2.get(c2)) //若已有一个文件到达结尾但另一文件中仍有字符则解密失败
{
cout<<endl<<"错误!解密失败!"<<endl;
fs1.close();
fs2.close();
return;
}
}
cout<<endl<<"解密成功!"<<endl;
fs1.close();
fs2.close();
}
void decode()
{
ofstream out("recall.txt");
ifstream fs("result.txt");
char c,N;
int n=strlen(password.ps);
for(int i=0;fs.get();i++)
{
if(i%password.l==0)
{
static int a=0;
if(a<password.wd)
{
N=c-(password.ps[a%n]-48);
if(N<0)
{
N=(N+122)%122;
out.put(N);
}
else
{
if(N==0) out.put('z');
else out.put(N);
}
a++;
}
else out.put(N);
}
else out.put(N);
}
fs.close();
out.close();
cmptxt();
}
void main()
{
cout<<"请输入需要加密的内容"<<endl;
cin>>s;
int a=0;
while (a!=5)
{
cout<<endl<<"★★★选择菜单★★★"<<endl;//显示提示的信息
cout<<"1.设置加密方法"<<endl;
cout<<"2.加密"<<endl;
cout<<"3.解密"<<endl;
cout<<"4.显示原始文件和解密文件"<<endl;
cout<<"5.退出"<<endl;
cout<<"请选择:";
cin>>a;
switch(a)
{
case 1://用单条件多选择语句实现调用与循环
set();
cout<<endl;
break;
case 2:
encode();
cout<<endl;
break;
case 3:
decode();
cout<<endl;
break;
case 4:
printtxt();
cout<<endl;
break;
case 5:
cout<<endl<<"谢谢使用!"<<endl<<endl;
break;
default:
cout<<endl<<"输入错误 请再次输入"<<endl;
}
}
}
有不会的直接QQ联系我吧 736092703
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯