一起养成写作习惯!这是我参与「掘金日新计划 · 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" 打开一个已经存在的文件文本,文件不存在则出错
分析思考
文件加密操作主要提箱对文件加密的操作的了解与熟练使用,在文件加密的过程中对文件的读出与写出是关键处理步骤,其中的加密部分需要使用类似于移位的方法进行加密,而对应的解密过程可以由加密方法推出。