C语言对二进制加密,c语言二进制文件加密

本文介绍了一种使用C语言实现的简单二进制文件加解密方法。通过读取文件到内存,对每个字节进行异或操作(使用'A'作为密钥),然后将处理后的数据写回文件,实现对二进制文件的加密和解密。示例代码中包含了加密函数`jia`和解密函数`jie`,以及主函数`main`的调用示例。

#define _CRT_SECURE_NO_WARNINGS//关闭安全检查

#include

#include

int getfilesize(char *path)

{

FILE *pf = fopen(path, "r");

if (pf == NULL)

{

return -1;

}

else

{

fseek(pf, 0, SEEK_END);

int length = ftell(pf);

return length;//获取文件大小

}

}

void copy(char *oldpath, char *newpath)

{

FILE *pfr, *pfw;

pfr = fopen(oldpath, "rb");

pfw = fopen(newpath, "wb");//写入二进制模式

if (pfr == NULL || pfw == NULL)

{

fclose(pfr);//关闭文件

fclose(pfw);

return;

}

else

{

int length = getfilesize(oldpath);

char *p = (char *)malloc(length*sizeof(char));//分配内存,读取文件

fread(p, sizeof(char), length, pfr);//读取二进制到内存

fwrite(p, sizeof(char), length, pfw);//写入二进制到文件

fclose(pfr);//关闭文件

fclose(pfw);

}

}

//加密

void jia(char *oldpath, char *newpath)

{

FILE *pfr, *pfw;

pfr = fopen(oldpath, "rb");

pfw = fopen(newpath, "wb");//写入二进制模式

if (pfr == NULL || pfw == NULL)

{

fclose(pfr);//关闭文件

fclose(pfw);

return;

}

else

{

int length = getfilesize(oldpath);

char *p = (char *)malloc(length*sizeof(char));//分配内存,读取文件

fread(p, sizeof(char), length, pfr);//读取二进制到内存

for (int i = 0; i < length; i++)

{

p[i] ^= 'A';

}

fwrite(p, sizeof(char), length, pfw);//写入二进制到文件

fclose(pfr);//关闭文件

fclose(pfw);

}

}

//解密

void jie(char *oldpath, char *newpath)

{

FILE *pfr, *pfw;

pfr = fopen(oldpath, "rb");

pfw = fopen(newpath, "wb");//写入二进制模式

if (pfr == NULL || pfw == NULL)

{

fclose(pfr);//关闭文件

fclose(pfw);

return;

}

else

{

int length = getfilesize(oldpath);

char *p = (char *)malloc(length*sizeof(char));//分配内存,读取文件

fread(p, sizeof(char), length, pfr);//读取二进制到内存

for (int i = 0; i < length; i++)

{

p[i] ^= 'A';

}

fwrite(p, sizeof(char), length, pfw);//写入二进制到文件

fclose(pfr);//关闭文件

fclose(pfw);

}

}

void main()

{

char *oldpath = "C:\\Users\\yincheng01\\Desktop\\腾讯截图2012.exe";

char *newpath = "C:\\Users\\yincheng01\\Desktop\\腾讯截图2012A.exe";

char *newjiepath = "C:\\Users\\yincheng01\\Desktop\\腾讯截图2012B.exe";

jia(oldpath, newpath);

jie(newpath, newjiepath);

system("pause");

}

fseek 函数名: fseek 功 能: 重定位流上的文件指针 用 法: int fseek(FILE *stream, long offset, int fromwhere); 描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字     节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。 返回值: 成功,返回0,否则返回其他值。 fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset.

ftell

函数ftell用于得到文件位置指针当前位置相对于文件首的偏移字节数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值