您好,登录后才能下订单哦!
本篇内容主要讲解“c语言中的文件加密与解密怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c语言中的文件加密与解密怎么实现”吧!
本程序是一个c语言的大作业的一部分
是简单的基于给定密钥实现的加密解密程序
文件的传输会有明文和密文的区别,明文发送是不安全的。
本题目实现对文件的加密和解密操作,采用的加密算法是根据密钥将明文中的字母置换为其它字母,所有字母不区分大小写,不考虑除英文字母外的字符。
例如:
明文是:They will arrive tomorrow,密钥k=Monday
① 设置英文字母与0到25有如下的对应关系:
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  | 
0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10  | 11  | 12  | 13  | 14  | 15  | 16  | 17  | 18  | 19  | 20  | 21  | 22  | 23  | 24  | 25  | 
②依据上述对应关系将明文和密钥转化为一组数字:
k=(12,14,13,3,0,24)
m=(19,7,4,24,22,8,11,11,0,17,17,8,21,4,19,14,12,14,17,17,14,22)
③将明文数字依据密钥长度分段,并逐一与密钥数字相加(模26),得到密文数字,即:
19  | 7  | 4  | 24  | 22  | 8  | 11  | 11  | 0  | 17  | 17  | 8  | 21  | 4  | 19  | 14  | 12  | 14  | 17  | 17  | 14  | 22  | 
12  | 14  | 13  | 3  | 0  | 24  | 12  | 14  | 13  | 3  | 0  | 24  | 12  | 14  | 13  | 3  | 0  | 24  | 12  | 14  | 13  | 3  | 
5  | 21  | 17  | 1  | 22  | 6  | 23  | 25  | 13  | 20  | 17  | 6  | 7  | 18  | 6  | 17  | 12  | 12  | 3  | 5  | 1  | 25  | 
C=(5,21,17,1,22,6,23,25,13,20,17,6,7,18,6,17,12,12,3,5,1,25)
④依据字母和数字对应关系将密文数字转换为字母串,即密文为:
c=FVRBWGXZNURGHSGRMMDFBZ
主函数提供功能菜单供用户选择,用户可以选择调用以下各个功能,也可以选择退出程序。
加密:对给定文件file1.txt内容按照密钥k=Monday进行加密,加密后密文写到文件file2.txt中;
解密:对给定密文文件file3.txt 利用密钥k=Monday进行解密,解密后的明文存放在文件file4.txt中;
#include<stdio.h>
int key[6]={12,14,13,3,0,24};//定义密钥 
int complex();
int simplify();
int main()
{
	int i=0,j=0;
	printf("功能如下\n1.加密\n2.解密\n3.退出\n");
	printf("请输入您所需功能对应的序号:(例:如需调用加密功能,便打出1即可)\n");
	for(;;)//直到输入3时才会退出 
	{
		scanf("%d",&i);
		if(i==1)j=complex();
		if(i==2)j=simplify();
		if(i==3)break;
		if(j==1)printf("\n功能实现成功\n");
		if(j==0)printf("\n功能实现失败\n"); 
	}
	return 0;
}
int complex() //加密 
{
	FILE *pin, *pout;
	pin = fopen("file1.txt","r");
	pout= fopen("file2.txt","w"); 
	int k=0;
	char Ming[1000],Mi[1000],*p=Ming,*q=Mi; 
	fgets(Ming,1000,pin); //puts(Ming);
	for(;*p!='\0';p++)
	{
		if(*p>='a'&&*p<='z')
		{
			*q=(*p-97+key[k])%26+65;//	printf(" %d %d %c\n",*(key+k),k,*q);
			k=k+1;q++; 
			if(k==6)k=0;
		}
		if(*p>='A'&&*p<='Z')
		{
			*q=(*p-65+key[k])%26+65;//	printf(" %d %d %c\n",*(key+k),k,*q);
			k=k+1;q++;
			if(k==6)k=0;
		}
	}
	*q='\0';
	//printf("密文为:");	//puts(Mi);
	fputs(Mi,pout); 
	fclose(pin);
	fclose(pout);
	return 1;
 } 
 int simplify()//解密 
 {	
 	FILE *pin, *pout;
	pin = fopen("file3.txt","r");
	pout= fopen("file4.txt","w");//打开文件 
	int k=0; //定义密钥 //k的意义是让密匙能够循环使用 
	char Ming[1000],Mi[1000],*p=Mi,*q=Ming;//定义密文,明文字符串 
	fgets(Mi,1000,pin);//从文件3读取密文 
	for(;*p!='\0';p++)//解密 
	{ 
		if(*p>='A'&&*p<='Z')
		{
			*q=(*p-65+26+26-*(key+k))%26+65;//printf(" %d %d %c\n",*(key+k),k,*q);//检验key出没出问题 	
			k=k+1;q++;
			if(k==6)k=0;//这两行代码让密钥循环使用 
		}	
	}
	*q='\0';//使字符串结束 
	fputs(Ming,pout);//puts(Ming);检验输出结果//导出加密结果 
	fclose(pin);
	fclose(pout); //关闭两个文件
	return 1;
 }到此,相信大家对“c语言中的文件加密与解密怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。