C语言(文件的移位与加密解密)

将某一已知文件的内容以字符形式读出,根据密钥(用户从键盘输入)将对应字符的ASCII码进行移位操作即可,解密时移动相反,最后将加密或解密后的文件保存。如加密:设原文为ab... 将某一已知文件的内容以字符形式读出,根据密钥(用户从键盘输入)将对应字符的ASCII码进行移位操作即可,解密时移动相反,最后将加密或解密后的文件保存。如加密:设原文为ab#5cd,密钥为5,则有ab#5cd每个字母向后移动5位,可得到密文(乱码)fg(10hi。

最好以课设报告形式给出 如不能也可~
展开
 我来答
huifeng00
推荐于2017-09-24 · TA获得超过5234个赞
知道大有可为答主
回答量:808
采纳率:0%
帮助的人:705万
展开全部
这道题,并不难,只是楼主,没有说清,是就字母移位吗?
但是看你的例子,有不全是。
程序如下:
#include <stdio.h>
#include <stdlib.h>

FILE *source;//源文件
FILE *destination;//目标文件
int key;//密钥
char file[100];//文件名
void encryption()//加密
{
char ch;
printf("请输入要加密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
printf("请输入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("无法创建文件!\n");
exit(0);
}
printf("请输入密钥\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch+=key;
fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}

void decrypt()//解密
{
char ch;
printf("请输入要解密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
printf("请输入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("无法创建文件!\n");
exit(0);
}
printf("请输入密钥\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch-=key;

fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}

int main()//主函数提供菜单
{
int choice=0;
printf("******************\n");
printf("1 文件加密\n");
printf("2 文件解密\n");
printf("3 退出\n");
printf("******************\n");
printf("请输入1 2 3选择操作\n");
scanf("%d",&choice);

switch(choice)
{
case 1:encryption();break;
case 2:decrypt();break;
case 3:break;
}
return 0;
}
乐跑小子
推荐于2018-05-11 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:7%
帮助的人:4665万
展开全部
#include<stdio.h>
void code(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-97+key)%26;
p++;
}
}
void uncode(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-71-key)%26;
p++;
}
}
main()
{
char str[100];
int n,key;
printf("输入密匙:");
scanf("%d",&key);
printf("输入1加密,输入2解密:");
scanf("%d",&n);
printf("输入字符串:");
scanf("%s",str);
if(n==1)
{
code(str,key);
printf("密文为%s\n",str);
}
else if(n==2)
{
uncode(str,key);
printf("原文为%s\n",str);
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-03-15
展开全部
//---------------------------------------------------------------------------

#include <stdio.h>

void encryption(const char *fname) /*对文件路径为fname的文件进行加密*/
{
int offset;
char efname[256],ch;
FILE *fp,*fp1;
if ((fp=fopen(fname,"r"))==NULL) {
fprintf(stderr,"FILE NOT FOUND!\n");
return ;
}
printf("path of the encrypted file:");
gets(efname); /*输入加密后的文件的保存路径*/
printf("offset:");
scanf("%d",&offset); /*输入位移量(密钥)*/
fp1=fopen(efname,"w");

while ((ch=fgetc(fp))!=EOF) /*进行加密,并写入密文文件*/
{
fputc(ch+offset,fp1);
}
fclose(fp1);
fclose(fp);
puts("Success!");
}

void decryption(const char *fname) /*对文件路径为fname的文件进行解密*/
{
int offset;
char efname[256],ch;
FILE *fp,*fp1;
if ((fp=fopen(fname,"r"))==NULL) {
fprintf(stderr,"FILE NOT FOUND!\n");
return ;
}
printf("path of the declassified document :");
gets(efname); /*输入解密后的文件的保存路径*/
printf("offset:");
scanf("%d",&offset); /*输入位移量(密钥)*/
fp1=fopen(efname,"w");

while ((ch=fgetc(fp))!=EOF) /*进行解密,并写入明文文件*/
{
fputc(ch-offset,fp1);
}
fclose(fp1);
fclose(fp);
puts("Success!");
}
int main(void)
{

char fpname[256];

puts("A.Encryption");
puts("B.Decryption");
printf("Input A or B(other to EXIT) :"); /*输入a为加密,输入b为解密,输入其它字符则退出程序*/
switch(getchar())
{
case 'a':
case 'A':
printf("FILE:");
fflush(stdin);
gets(fpname); /*输入要加密的明文文件路径*/
encryption(fpname); /*调用加密函数对文件进行加密*/
break;
case 'b':
case 'B':
printf("FILE:");
fflush(stdin);
gets(fpname); /*输入要解密的密文文件路径*/
decryption(fpname); /*调用解密函数对文件进行解密*/
break;
default:break;

}
return 0;
}
//---------------------------------------------------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ProgrammerFeng
2010-03-15 · TA获得超过160个赞
知道答主
回答量:46
采纳率:0%
帮助的人:52.5万
展开全部
全部缩进到首行了,ALT+F8可以自动对齐~~用最简单的C写的,一目了然!设文件为1.txt
#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAXLONGTH 5000 //如果文件内容较长,请修改MAXLONGTH

void show()//显示源文件内容
{
FILE *fp;
char ch;
if((fp=fopen("1.txt","r"))==NULL)
{
printf("打开文件失败!\n");
getch();
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}

void jiami(int num) //密码算法,入口参数:密钥
{
FILE *fp;
char ch;
char strbuffer[MAXLONGTH];
int bufsize = 0;
if((fp=fopen("1.txt","r"))==NULL)
{
printf("打开文件失败!\n");
getch();
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)
{
ch = ch+num;
putchar(ch);
strbuffer[bufsize]=ch;
bufsize++;
ch=fgetc(fp);
}
strbuffer[bufsize]='\0';
printf("\n\n");
fclose(fp);
if((fp=fopen("1.txt","w+"))==NULL) //重写文件
{
printf("写入文件失败,任意键退出!");
getch();
exit(1);
}
fputs(strbuffer,fp);
fclose(fp);
}
void main()
{
int num = 0;
int chooce = 0;
printf("源文件内容如下:\n");
show();
printf("\n\n请输入密匙:");
scanf("%d",&num);
printf("*****************\n");
printf("** 1.加密 **\n");
printf("** 2.解密 **\n");
printf("*****************\n");
printf("请选择文件处理方式:");
scanf("%d",&chooce);
while(chooce)
switch(chooce) {
case 1: //加密算法
printf("\n加密结果------->");
jiami(num);
chooce = 0;
break;
case 2: //解密算法
num = -num;
printf("\n解密结果------->");
jiami(num);
chooce = 0;
break;
default:
printf("\n无效请求,请重新选择文件处理方式:");
scanf("%d",&chooce);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b0e28cae4
2010-03-15 · TA获得超过4016个赞
知道大有可为答主
回答量:1275
采纳率:85%
帮助的人:612万
展开全部
/*
程序功能:通过移位的方法加密/解密文件
程序说明:本程序的源文件生成可执行文件后(.exe结尾),保存在一个目录中。
要加密/解密的文件必须已经存在这个目录中,否则会提示无法打开文件。
接着按程序提示即可完成指定操作。
程序流程:选择操作类型->打开输入文件(要加密/解密的文件的文件名称)->输入密钥
->打开输出文件(保存加密/解密后的文件的文件名称)->加密/解密
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE * infile=NULL; //输入文件指针
FILE * outfile=NULL; //输出文件指针
int key; //密钥
int operation=0; //操作类型,加密---1,解密---2
char filename[100],tempfile[1000],data;

while(1)
{
infile=outfile=NULL;
operation=0;
//选择操作类型
while(!(operation==1||operation==2))
{
printf("请选择【加密---1 解密---2】:");
scanf("%d",&operation);
//处理非法输入
if(!(operation==1||operation==2))
printf("选择有误,请重新选择!\n");
}
//打开输入文件
while(infile==NULL)
{
printf("\n输入要打开的文件文件名称:");
scanf("%s",filename);
//以只读方式打开文件流
infile=fopen (filename,"r");
//打开文件流失败,重新输入文件名
if(infile==NULL)
printf("\n无法打开文件,请检查文件是否存在后重新输入!");
}
//输入密钥
printf("\n输入密钥:");
scanf("%d",&key);

if(operation==1)
printf("\n输入保存加密后文件的名称:");
else
printf("\n输入保存解密后文件的名称:");
scanf("%s",filename);
//以读写方式打开输出文件
outfile=fopen (filename,"w+");

while((data=fgetc(infile))!=EOF)//逐个字符读出输入文件的内容
{
if(operation==1) //加密
fputc(data+key,outfile);
else //解密
fputc(data-key,outfile);
}

//输出加密/解密的过程
if(operation==1)
printf("\n加密过程:");
else
printf("\n解密过程:");
rewind(infile); //文件指针回到文件开始处
while((data=fgetc(infile))!=EOF)
printf("%c",data);

printf(" --> ");

rewind(outfile);
while((data=fgetc(outfile))!=EOF)
printf("%c",data);

printf("\n\n");
fclose(infile); //关闭文件流
fclose(outfile);
}

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式