#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//打印帮助
void print_help();
//加密文件
void encrypted_file();
//解密文件
void decrypt_file();
//获取源文件、目的文件名
void get_file_name(char *dest_file_name, char *src_file_name);
//读取源文件内容
char *read_src_file(unsigned long int *file_length, char *src_file_name);
//源文件加密
char *file_text_encrypt(char *src_file_text, unsigned long int length, unsigned int password);
//源文件解密
char *file_text_decrypt(char *src_file_text, unsigned long int length, unsigned int password);
//保存目的文件
void save_file(char *text, unsigned long int length, char *file_name);
int main(int argc, char const *argv[])
{
while (1)
{
print_help();
int ch = 0;
scanf("%d", &ch);
if (ch == 1)
{
encrypted_file();
}
else if (ch == 2)
{
decrypt_file();
}
else if (ch == 3)
{
break;
}
}
return 0;
}
void print_help()
{
printf("********1:加密文件***********\n");
printf("********2:解密文件***********\n");
printf("********3:退出程序***********\n");
}
void encrypted_file()
{
//获取源文件、目的文件名
char dest_file[32] = "";
char src_file[32] = "";
get_file_name(dest_file, src_file);
//读取源文件内容
unsigned long int file_length = 0;
char *data = read_src_file(&file_length, src_file);
//源文件加密
unsigned int password = 0;
printf("please input your unsigned int passworld:");
scanf("%u", &password);
data = file_text_encrypt(data, file_length, password);
//保存目的文件
save_file(data, file_length, dest_file);
}
void decrypt_file()
{
//获取源文件、目的文件名
char dest_file[32] = "";
char src_file[32] = "";
get_file_name(dest_file, src_file);
//读取源文件内容
unsigned long int file_length = 0;
char *data = read_src_file(&file_length, src_file);
//源文件解密
unsigned int password = 0;
printf("please input your unsigned int passworld:");
scanf("%u", &password);
data = file_text_decrypt(data, file_length, password);
//保存目的文件
save_file(data, file_length, dest_file);
}
void get_file_name(char *dest_file_name, char *src_file_name)
{
printf("请输入你的原文件名称(30个字符):");
scanf("%s", src_file_name);
printf("请输入你的目的文件名称(30个字符):");
scanf("%s", dest_file_name);
}
char *read_src_file(unsigned long int *file_length, char *src_file_name)
{
FILE *fp = fopen(src_file_name, "r");
if (fp == NULL)
{
perror("fopen");
exit(-1);
}
fseek(fp, 0, 2);
*file_length = ftell(fp);
rewind(fp);
char *data = (char*)calloc(1, *file_length + 1);
if (data == NULL)
{
perror("calloc");
exit(-1);
}
fread(data, *file_length, 1, fp);
fclose(fp);
return data;
}
char *file_text_encrypt(char *src_file_text, unsigned long int length, unsigned int password)
{
for (int i=0; i<length; i++)
{
src_file_text[i] += password;
}
return src_file_text;
}
char *file_text_decrypt(char *src_file_text, unsigned long int length, unsigned int password)
{
for (int i=0; i<length; i++)
{
src_file_text[i] -= password;
}
return src_file_text;
}
void save_file(char *text, unsigned long int length, char *file_name)
{
FILE *fp = fopen(file_name, "w");
if (fp == NULL)
{
perror("fopen");
exit(-1);
}
fwrite(text, length, 1, fp);
fclose(fp);
if (text != NULL)
{
free(text);
text = NULL;
}
}
C 语法 - 12_文件之加密器制作
于 2023-04-19 23:41:11 首次发布