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

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

最好以课设报告形式给出 如不能也可~

这道题,并不难,只是楼主,没有说清,是就字母移位吗?
但是看你的例子,有不全是。
程序如下:
#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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-11
#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);
}
}本回答被网友采纳
第2个回答  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;
}
//---------------------------------------------------------------------------
第3个回答  2010-03-15
全部缩进到首行了,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);
}
}
第4个回答  2010-03-15
/*
程序功能:通过移位的方法加密/解密文件
程序说明:本程序的源文件生成可执行文件后(.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;
}

利用C语言实现移位加密和解密算法
g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle.解密试试吧~~加密的话 改动三个地方就行 自己试试吧 哈哈

c语言文件加密和解密
c语言文件加密和解密方法如下:1、首先打开VC++6.0;2、选择文件,新建;3、选择C++ source file 新建一个空白文档;4、声明头文件 include<stdio.h> include<stdlib.h> include<string.h> 首先写个加密函数,算法就是简介里说的;void EncryptFile(FILE *sfp,FILE *dfp,char pwd){char ch;if(...

如何用C语言对文件进行加密和解密?
char password[256]; \/\/ 加密\/解密密码 const char filenametemp[] = "temp15435255435325432543.temp"; \/\/ 加密\/解密中间文件 void inputpass(char *pass); \/\/密码输入以"***"显示 void main() { FILE *fp; \/\/ 加密\/解密的文件 FILE *fptemp; \/\/ 加密\/解密过程临时文件 int pwdlen;...

C语言实现字符串的加密和解密
程序分析:本例中使用的加密算法相对简单,它是通过将字符串中的每个字符与其在字符串中的位置加上一个偏移值5来进行加密的。具体代码如下:cryptograph[i] = text[i] + i + 5;以输入的字符串"helloworld"为例,其中第一个字符"h"在字符串中的位置是0,那么它对应的密文字符就是"h" + 0 + ...

求大神给一个C语言模块设计的题目,只要题目
1. 输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行,每一列对角线之和均相等。例如,三阶魔方阵为:8 1 6 3 5 7 4 9 2 要求输出1至n2的自然数构成的魔方阵。2.给出年、月、日,计算该日是该年的第几天。3.移位加密与解密 (1)文件加密 (2)文件解密 说...

C语言密码移位问题?
明文移动k位之后,如果超出了字母z,如:z字母向右移动16位,已经超出了范围,就需要经过处理 char e(char m,int k){ m=m+k; if(m>90) m=k-90+65;\/\/这里涉及到按键码问题,每个键盘都有一个asc2码,Z=90,A=65 return m;} ...

C语言程序题(加密解密)
*s+n-26:*s+n;}void jiemi(char *s,int n){for(;*s;s++) if(isalpha(*s)) *s=*s%32-n<1?*s+26-n:*s-n;}int main(){ char s[200]; int n; gets(s); scanf("%d",&n); jiami(s,n); puts(s); jiemi(s,n); puts(s); return 0;} ...

C 简单异或移位 加密后 还原不回去啊 大神帮忙看看
"rb""wb"是进行二进制文件打开的,配套操作函数是fread与fwrite 如果是要以文本文件打开请使用"rt""wt"。不过既然是加密解密的话还是用二进制读写最好,读写全部用fread与fwrite函数

C语言中如何将输入的信息存在指定文件夹里,如何对储存的文件加密...
1,使用绝对路径 2,找一个加密的文件类。

C语言 文件异或加密
=EOF)\/\/读入字符直到文件结尾 { c^=key;\/\/执行异或加密或解密 fputc(c,o);\/\/写入文件 } fclose(i); fclose(o);}int main(){ scrambler(IN,OUT,KEY); return 0;} 但是异或加密也是有缺陷的。最大的缺陷是加密操作是二进制层面的,获取到的加密文件大部分将是不...

相似回答