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的文件内容一致,说明解密成功。
——兄弟们,如果觉得有帮助,记得点个赞,加个订阅!
版权声明:本文标题:文件加密解密操作——源码开源 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728073978a1144253.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论