C语言文件加密

129 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

文件加密代码

int main()
{
	char flag;
	Process();
}

//读入源文件 
int openSrcFile(char **buffer)
{
	FILE *myfile_src; /*源文件指针*/
	char filename[20]; /*文件名数组*/
	long file_size; /*记录文件的长度*/
	printf("Please input the filename you want to encrypt: \n");
	scanf("%s",filename);
	if(!(myfile_src = fopen(filename,"rb")))
	{
		printf("ERROR!");
	}
	fseek(myfile_src,0,SEEK_END);
	file_size = ftell(myfile_src);
	printf("%d\n",file_size); 
	fseek(myfile_src,0,SEEK_SET);
	*buffer = (char *)malloc(file_size);
	fread(*buffer,1,file_size,myfile_src); /*读入文件*/
	fclose(myfile_src);
	return file_size;
}

//写回文件 
void saveDstFile(char *buffer,int file_size)
{
	FILE *myfile_dst; /*源文件指针*/
	char filename[20]; /*文件名数组*/
	printf("Please input the encrypted filename:\n");
	scanf("%s",filename);
	if(!(myfile_dst = fopen(filename,"wb")))
	{
		printf("ERROR!");
	}
	fwrite(buffer,1,file_size,myfile_dst);
	printf("OK");
	 
	fclose(myfile_dst);
}

void Process()
{
	FILE *myfile_dst;
	char * buffer;
	int key;
	long file_size; /*记录文件的长度*/
	file_size = openSrcFile(&buffer); /*读入源文件*/
	printf("Please input key:\n");
	scanf("%d",&key); /*用户输入密钥*/
	
	/*加密状态*/
	encryption(buffer,file_size,key);

	saveDstFile(buffer,file_size);
}

//文件加密操作 
void encryption(char buffer[],int file_size,int key)
{
	int i;
	for( i = 0; i < file_size; i++)
	buffer[i] = buffer[i] + key; /* M=2*(P+key) */
}

代码解析

main

创建一个char类型变量flag,进行process操作

Process()

为中间操作,进行读取文件,加密,解密等操作。

encryption(char buffer[],int file_size,int key)

传入buffer[]数组、file_size、key。

通过 buffer[i] = buffer[i] + key 语句进行加密操作。

saveDstFile(char *buffer,int file_size)

文件加密完成后将文件写回。

openSrcFile(char **buffer)

打开一个文件操作。

文件一般包括三要素:文件路径、文件名、后缀。

fopen():文件打开操作

头文件:stdio.h

函数定义:FILE *fopen(char *pname, char *mode)

函数说明:pname是文件名,mode是打开文件的方式

mode:"r" 打开一个已经存在的文件文本,文件不存在则出错

分析思考

文件加密操作主要提箱对文件加密的操作的了解与熟练使用,在文件加密的过程中对文件的读出与写出是关键处理步骤,其中的加密部分需要使用类似于移位的方法进行加密,而对应的解密过程可以由加密方法推出。