本篇内容主要讲解“c语言中的文件加密与解密怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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<stdio.h>
int key[6]={12,14,13,3,0,24};//定义密钥
int complex();
int simplify();
int main()
{
int i=0,j=0;
printf("功能如下
1.加密
2.解密
3.退出
");
printf("请输入您所需功能对应的序号:(例:如需调用加密功能,便打出1即可)
");
for(;;)//直到输入3时才会退出
{
scanf("%d",&i);
if(i==1)j=complex();
if(i==2)j=simplify();
if(i==3)break;
if(j==1)printf("
功能实现成功
");
if(j==0)printf("
功能实现失败
");
}
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!='