文件加密解密操作——源码开源

/**********************************************
功能:文件加密解密
注意:(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的文件内容一致,说明解密成功。

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

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kr.Forver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值