加解密处理系统,帮帮忙编个吧,程序设计的作业!两周内要完成报告,先谢谢你了....
问题描述:编写一个对字符文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可以将...
问题描述:编写一个对字符文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可以将选取内容的每个字符依次反复加上“4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(既N%122)。解密与加密的顺序相反。
2. 加密时对文档的内容按照定长的分组,固定的打乱顺序。如原来是”abcdefghijklmnopq”,按照七个分成三组, ”abcdefg”, ”hijklmn”,”opq”,每个小组按固定的规律打算打乱原有的位置,例如重新排列成”cabdfge”, ”jhikmnl”,”qop”。解密按相反的进行。
功能要求
1) 从键盘输入要进行加密的一行字符串或者需要加密的文件名。
2) 显示菜单:
*********************************
1.设置加密方法
2.加密方法1
3.加密方法2
4.解密方法1
5.解密方法2
6.退出
*********************************
按照菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;显示是将文件在屏幕上显示出来,供人工校对。
3)算法提示
1) 加密时,每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122).
例如:加密the (t)116+4,(h)104+9,(e)101+6 变为xqk
2) 解密:解密过程与加密过程的顺序正好相反,即从第一个字符开始,每个字符依次反复减去”4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122,即 (N+122), 其中N为负数。
例如:把xqk解密 (x) 120-4 (q)111-9 (k) 107-6 变为 the
4)其他要求
1) 变量、函数命名符合规范。
2) 注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。
3) 程序的层次清晰,可读性强。 展开
2. 加密时对文档的内容按照定长的分组,固定的打乱顺序。如原来是”abcdefghijklmnopq”,按照七个分成三组, ”abcdefg”, ”hijklmn”,”opq”,每个小组按固定的规律打算打乱原有的位置,例如重新排列成”cabdfge”, ”jhikmnl”,”qop”。解密按相反的进行。
功能要求
1) 从键盘输入要进行加密的一行字符串或者需要加密的文件名。
2) 显示菜单:
*********************************
1.设置加密方法
2.加密方法1
3.加密方法2
4.解密方法1
5.解密方法2
6.退出
*********************************
按照菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;显示是将文件在屏幕上显示出来,供人工校对。
3)算法提示
1) 加密时,每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122).
例如:加密the (t)116+4,(h)104+9,(e)101+6 变为xqk
2) 解密:解密过程与加密过程的顺序正好相反,即从第一个字符开始,每个字符依次反复减去”4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122,即 (N+122), 其中N为负数。
例如:把xqk解密 (x) 120-4 (q)111-9 (k) 107-6 变为 the
4)其他要求
1) 变量、函数命名符合规范。
2) 注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。
3) 程序的层次清晰,可读性强。 展开
3个回答
展开全部
这个是你要的程序,你输入的如果是文件路径而且能打开正确文件的话,就会操作该文件(不能太长,要小于5w汉字的长度),另外,文件中的字母不能是大写字母,因为你这里题目本身就有问题,ASCII码所能表示的范围不止122,所以譬如小写字母t增加8以后变成了2,那么会和汉字出现混淆,如果解决的话,那么就不符合你这个题目122循环的条件了,我vc6通过调试运行了,你可以试试看
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
FILE *file=NULL;
void main()
{
void set(char*,int*,int*);
void encrypt1(char*,const int*);
void decrypt1(char*,const int*);
void encrypt2(char*,const int*);
void decrypt2(char*,const int*);
char content[100000]="";
int key1[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
int key2[2]={0};
char press='\0';
do
{
printf("*********************************\n");
printf("1.设置加密方法\n");
printf("2.加密方法1\n");
printf("3.加密方法2\n");
printf("4.解密方法1\n");
printf("5.解密方法2\n");
printf("6.退出\n");
printf("*********************************\n");
printf("选择操作步骤(1-6):\n");
switch(press=getch())
{
case '1':set(content,key1,key2);break;
case '2':encrypt1(content,key1);break;
case '3':encrypt2(content,key2);break;
case '4':decrypt1(content,key1);break;
case '5':decrypt2(content,key2);break;
default:break;
}
}while(press!='6');
if(file!=NULL)
{
rewind(file);
fputs(content,file);
printf("文件或字符串的内容为:\n");
puts(content);
fclose(file);
}
}
void set(char content[100000],int key1[10],int key2[2])
{
long int key;
char ch;
int i;
char str[100]="";
if(file!=NULL)
{
fclose(file);
file=NULL;
}
printf("输入字符串或者文件完整路径:");
gets(str);
if(file=fopen(str,"r+"))
{
printf("输入的是文件完整路径,内容为:\n");
while(fgetc(file)!=EOF)
{
fseek(file,-1,1);
fgets(content,100000,file);
printf("%s",content);
}
}
else
{
file=fopen("content.txt","w+");
strcpy(content,str);
printf("输入的是字符串,内容为:\n");
puts(content);
}
printf("\n设置密码:");
gets(str);
for(i=0;(i<strlen(str))&&(i<10);i++)
*(key1+i)=*(str+i)-'0';
key=atoi(str);
key2[0]=(key%11>=3)?(key%11):3;
for(key2[1]=1,i=0;i<10;i++)
if((*(key1+i)>key2[1])&&(*(key1+i)<key2[0]))
key2[1]=*(key1+i);
}
void encrypt1(char content[100000],const int key1[10])
{
int j,k;
for(j=0,k=0;j<strlen(content);j++)
{
*(content+j)+=*(key1+k);
k++;
if(k==9||*(key1+k)==-1)
k=0;
if(*(content+j)>=122)
*(content+j)%=122;
}
}
void decrypt1(char content[100000],const int key1[10])
{
int j,k;
for(j=0,k=0;j<strlen(content);j++)
{
*(content+j)-=*(key1+k);
k++;
if(k==9||*(key1+k)==-1)
k=0;
if(*(content+j)>=122)
*(content+j)%=122;
}
}
void encrypt2(char content[100000],const int key2[2])
{
char precontent[100000],str[11]="",ch;
int i,j,p;
p=key2[0];
strcpy(precontent,content);
strcpy(content,"");
for(i=0;i<strlen(precontent);)
{
if(strlen(precontent)-i<key2[0])
p=strlen(precontent)-i;
for(j=p-1;j>=0;j--)
*(str+j)=*(precontent+i++);
if(p==key2[0])
{
ch=*(str);
*(str)=*(str+key2[1]);
*(str+key2[1])=ch;
}
else
{
ch=*(str);
*(str)=*(str+p-1);
*(str+p-1)=ch;
}
strcat(content,str);
for(j=0;j<p;j++)
*(str+j)='\0';
if(p!=key2[0])
break;
}
}
void decrypt2(char content[100000],const int key2[2])
{
char precontent[100000],str[11]="",ch;
int i,j,p;
p=key2[0];
strcpy(precontent,content);
strcpy(content,"");
for(i=0;i<strlen(precontent);)
{
if(strlen(precontent)-i<key2[0])
p=strlen(precontent)-i;
for(j=p-1;j>=0;j--)
*(str+j)=*(precontent+i++);
if(p==key2[0])
{
ch=*(str+p-1);
*(str+p-1)=*(str+p-1-key2[1]);
*(str+p-1-key2[1])=ch;
}
else
{
ch=*(str);
*(str)=*(str+p-1);
*(str+p-1)=ch;
}
strcat(content,str);
for(j=0;j<11;j++)
*(str+j)='\0';
if(p!=key2[0])
break;
}
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
FILE *file=NULL;
void main()
{
void set(char*,int*,int*);
void encrypt1(char*,const int*);
void decrypt1(char*,const int*);
void encrypt2(char*,const int*);
void decrypt2(char*,const int*);
char content[100000]="";
int key1[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
int key2[2]={0};
char press='\0';
do
{
printf("*********************************\n");
printf("1.设置加密方法\n");
printf("2.加密方法1\n");
printf("3.加密方法2\n");
printf("4.解密方法1\n");
printf("5.解密方法2\n");
printf("6.退出\n");
printf("*********************************\n");
printf("选择操作步骤(1-6):\n");
switch(press=getch())
{
case '1':set(content,key1,key2);break;
case '2':encrypt1(content,key1);break;
case '3':encrypt2(content,key2);break;
case '4':decrypt1(content,key1);break;
case '5':decrypt2(content,key2);break;
default:break;
}
}while(press!='6');
if(file!=NULL)
{
rewind(file);
fputs(content,file);
printf("文件或字符串的内容为:\n");
puts(content);
fclose(file);
}
}
void set(char content[100000],int key1[10],int key2[2])
{
long int key;
char ch;
int i;
char str[100]="";
if(file!=NULL)
{
fclose(file);
file=NULL;
}
printf("输入字符串或者文件完整路径:");
gets(str);
if(file=fopen(str,"r+"))
{
printf("输入的是文件完整路径,内容为:\n");
while(fgetc(file)!=EOF)
{
fseek(file,-1,1);
fgets(content,100000,file);
printf("%s",content);
}
}
else
{
file=fopen("content.txt","w+");
strcpy(content,str);
printf("输入的是字符串,内容为:\n");
puts(content);
}
printf("\n设置密码:");
gets(str);
for(i=0;(i<strlen(str))&&(i<10);i++)
*(key1+i)=*(str+i)-'0';
key=atoi(str);
key2[0]=(key%11>=3)?(key%11):3;
for(key2[1]=1,i=0;i<10;i++)
if((*(key1+i)>key2[1])&&(*(key1+i)<key2[0]))
key2[1]=*(key1+i);
}
void encrypt1(char content[100000],const int key1[10])
{
int j,k;
for(j=0,k=0;j<strlen(content);j++)
{
*(content+j)+=*(key1+k);
k++;
if(k==9||*(key1+k)==-1)
k=0;
if(*(content+j)>=122)
*(content+j)%=122;
}
}
void decrypt1(char content[100000],const int key1[10])
{
int j,k;
for(j=0,k=0;j<strlen(content);j++)
{
*(content+j)-=*(key1+k);
k++;
if(k==9||*(key1+k)==-1)
k=0;
if(*(content+j)>=122)
*(content+j)%=122;
}
}
void encrypt2(char content[100000],const int key2[2])
{
char precontent[100000],str[11]="",ch;
int i,j,p;
p=key2[0];
strcpy(precontent,content);
strcpy(content,"");
for(i=0;i<strlen(precontent);)
{
if(strlen(precontent)-i<key2[0])
p=strlen(precontent)-i;
for(j=p-1;j>=0;j--)
*(str+j)=*(precontent+i++);
if(p==key2[0])
{
ch=*(str);
*(str)=*(str+key2[1]);
*(str+key2[1])=ch;
}
else
{
ch=*(str);
*(str)=*(str+p-1);
*(str+p-1)=ch;
}
strcat(content,str);
for(j=0;j<p;j++)
*(str+j)='\0';
if(p!=key2[0])
break;
}
}
void decrypt2(char content[100000],const int key2[2])
{
char precontent[100000],str[11]="",ch;
int i,j,p;
p=key2[0];
strcpy(precontent,content);
strcpy(content,"");
for(i=0;i<strlen(precontent);)
{
if(strlen(precontent)-i<key2[0])
p=strlen(precontent)-i;
for(j=p-1;j>=0;j--)
*(str+j)=*(precontent+i++);
if(p==key2[0])
{
ch=*(str+p-1);
*(str+p-1)=*(str+p-1-key2[1]);
*(str+p-1-key2[1])=ch;
}
else
{
ch=*(str);
*(str)=*(str+p-1);
*(str+p-1)=ch;
}
strcat(content,str);
for(j=0;j<11;j++)
*(str+j)='\0';
if(p!=key2[0])
break;
}
}
展开全部
For your question 加解密处理系统,帮帮忙编个吧,程序设计的作业!两周内要完...,
联系我们需要提供问题和联系方式,
如有具体需求,可以我们联系,
有可能帮你,
百度_Hi给我吧,
此回复对于所有需求和和来访者有效,
ES:\\D2E07E03A2556DD79E124A33E77C8107
联系我们需要提供问题和联系方式,
如有具体需求,可以我们联系,
有可能帮你,
百度_Hi给我吧,
此回复对于所有需求和和来访者有效,
ES:\\D2E07E03A2556DD79E124A33E77C8107
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询