c语言 文件加密与解密
Posted 九磅十五便士的业余编程人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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<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语言 文件加密与解密的主要内容,如果未能解决你的问题,请参考以下文章