这是我的话题,但是我在网上找了很久也没找到C语言文件加密的办法,所以想请各位帮我看一看
文件加密
文件的传输会有明文和密文的区别,明文发送是不安全的,用一个程序实现发送文件的加密和解密操作。加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计。
要求:
(1)对文件的字符根据加密算法,实现文件加密。
(2)对操作给出必要的提示。
(3)对存在的file1.txt文件,必须先打开,后读写,最后关闭。加密后的文件放在file2.txt。
(4)解密文件保存在file3.txt中。
供参考:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
void encryption(char* text, int key)//加密
{
char* ptr = NULL;
for (ptr = text; *ptr; ptr++) {
if (isalpha(*ptr))
isupper(*ptr) ? *ptr = (*ptr - 'A' + key) % 26 + 'A' :
*ptr = (*ptr - 'a' + key) % 26 + 'a';
}
*ptr = '\0';
}
void decrypt(char* text, int key)//解密
{
char* ptr = NULL;
for (ptr = text; *ptr; ptr++) {
if (isalpha(*ptr))
isupper(*ptr) ? *ptr = (*ptr - 'A' - key + 26) % 26 + 'A' :
*ptr = (*ptr - 'a' - key + 26) % 26 + 'a';
}
*ptr = '\0';
}
void fread_file(char* filename, char* text)
{
FILE* fp; int i = 0;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("打开的文件不存在!\n");
exit(0);
}
while ((text[i] = fgetc(fp)) != EOF) i++;
fclose(fp);
}
void write_file(char* filename, char* text)
{
FILE* fp;
fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(0);
}
fprintf(fp, "%s", text);
fclose(fp);
}
int main()
{
int m, n;
char text[4096] = { 0 }, ptext[4096] = { 0 };
printf("读入要加密的明文:");
fread_file("file1.txt", text); //gets(text, 4096);
printf("%s\n", text);
printf("输入学号:");
scanf("%d", &m);
m % 10 == 0 ? n = 10 : n = m % 10;//密钥:以学号尾号为秘钥进行加密(例:尾号为0则秘钥为10)
encryption(text, n);
printf("加密后的密文为:%s\n", text);
write_file("file2.txt", text); //加密后的文件放在file2.txt
fread_file("file2.txt", ptext);
decrypt(ptext, n);
printf("解密后的明文为:%s\n", ptext);
write_file("file3.txt", ptext);//解密文件保存在file3.txt中
return 0;
}
参照我的博客文章专栏C/C++,里面有几篇数据和文件加密的文章,包含C语言实现的代码。