验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

c语言中的文件加密与解密怎么实现

阅读:1107 来源:乙速云 作者:代码code

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

      解密过程与加密过程类似,采用的是模26减运算

      功能要求

      主函数提供功能菜单供用户选择,用户可以选择调用以下各个功能,也可以选择退出程序。

      系统应提供以下功能

      • 加密:对给定文件file1.txt内容按照密钥k=Monday进行加密,加密后密文写到文件file2.txt中;

      • 解密:对给定密文文件file3.txt 利用密钥k=Monday进行解密,解密后的明文存放在文件file4.txt中;

      #include
      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!='';p++)
      	{
      		if(*p>='a'&&*p<='z')
      		{
      			*q=(*p-97+key[k])%26+65;//	printf(" %d %d %cn",*(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 %cn",*(key+k),k,*q);
      			k=k+1;q++;
      			if(k==6)k=0;
      		}
      	}
      	*q='';
      	//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!='';p++)//解密 
      	{ 
      		if(*p>='A'&&*p<='Z')
      		{
      			*q=(*p-65+26+26-*(key+k))%26+65;//printf(" %d %d %cn",*(key+k),k,*q);//检验key出没出问题 	
      			k=k+1;q++;
      			if(k==6)k=0;//这两行代码让密钥循环使用 
      		}	
      	}
      	*q='';//使字符串结束 
      	fputs(Ming,pout);//puts(Ming);检验输出结果//导出加密结果 
      	fclose(pin);
      	fclose(pout); //关闭两个文件
      	return 1;
       }
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>