admin管理员组

文章数量:1589660

/**********************************************
功能:文件加密解密
注意:(1)每进行一次文件函数操作,都要进行判断是否会出错;
(2)因为是以a+方式打开的文件,所以按理说a.c、b.c和c.c可以不用自己创建,让程序来创建也行。
但是a.c源文件要自己先创建。因为a.c是加密源文件,系统自动创建的话是空白的;
(3)大家可能有个疑问,循环取字符是怎么实现自动取下一个的?解答就是:有一个文件位置指针。
************************************************/
#include <stdio.h>

/****************************************************
函数声明区
*****************************************************/
int En_Secret(char *oriPath,char *enPath,char passwd);


/****************************************************
宏定义区
*****************************************************/
#define ORI_FILE_FAIL -1
#define EN_FILE_FAIL  -2
#define PUT_CHAR_FAIL -3
#define CORRECT       0


/****************************************************
函数名:main
功  能:主函数
返回值:int,一种正确返回类型
*****************************************************/
int main()
{
	En_Secret("./a.c","./b.c",0xa5);  //加密操作
	En_Secret("./b.c","./c.c",0xa5);  //解密操作
	return CORRECT;
}


/****************************************************
函数名:En_secret
功  能:加密解密函数
参  数:oriPath是源文件路径地址,enPath是加密/解密后的源文件路径地址,passwd是异或密码
返回值:int,三种返回错误类型,一种返回正确类型
****************************************************/
int En_Secret(char *oriPath,char *enPath,char passwd)
{
    //定义变量
	FILE *oriFd,*encFd;  //用来作为函数句柄
	int oriChar;         //用来存储取出来的字符
	char enChar;         //用来存储与密码异或后的字符

	//打开文件
	oriFd = fopen(oriPath,"a+");           //以a+方式打开文件
	if(oriFd == NULL)
	{
		printf("origin file open failed!\n");
		return ORI_FILE_FAIL;               //返回错误代码号,见宏定义
	}

	encFd = fopen(enPath,"a+");             //以a+方式打开文件
	if(encFd == NULL)
	{
		printf("en file open failed!\n");
		return EN_FILE_FAIL;                //返回错误代码号,见宏定义
	}

	//取出字符,与密码异或后写入新文件
	oriChar = fgetc(oriFd);               //取出字符
	while(oriChar != EOF)                  //只要取字符不出错,就进行循环
	{
		enChar = (char)oriChar ^ passwd;  //异或,可以是加密,也可以是解密
		if(fputc(enChar,encFd) == EOF)     //把异或后的字符写入新文件,并判断写入字符是否出错
		{
			printf("put char failed!\n"); 
			return PUT_CHAR_FAIL;           //返回错误代码号,见宏定义
		}

		oriChar = fgetc(oriFd);          //取出字符
	}   

	fclose(oriFd);
	fclose(encFd);

	return CORRECT;
}

运行结果如下:

b.c是a.c的加密文件,b.c是乱码,说明加密成功;
a.c与c.c的文件内容一致,说明解密成功。

——兄弟们,如果觉得有帮助,记得点个赞,加个订阅!

本文标签: 开源源码加密解密操作文件