废话不说,直接上代码
写了两个函数,一个加密,一个解密
前提:先要定义一个秘钥
#define KEY "#$%^&*()%^&*()_" // 加密解密密钥,可自定义
加密函数,参数为要加密文件路径
int Filepass(char* filePath)
{
FILE* fp = NULL;
char* pText = NULL;
int nFileSize = 0;
int nKeyLength = strlen(KEY);
// 打开文件
fp = fopen(filePath, "rb");
if (fp == NULL)
{
printf("Open file failed.\n");
return -1;
}
// 获取文件大小
fseek(fp, 0L, SEEK_END);
nFileSize = ftell(fp);
fseek(fp, 0L, SEEK_SET);
// 分配存储文件内容的缓冲区
pText = (char*)malloc(nFileSize);
if (pText == NULL)
{
fclose(fp);
return -1;
}
// 读取文件内容
fread(pText, nFileSize, 1, fp);
fclose(fp);
// 加密文件内容
for (int i = 0; i < nFileSize; i++)
{
pText[i] = pText[i] ^ KEY[i % nKeyLength]; // 逐个字节异或密码
}
// 将加密后的文件内容写回到原文件
fp = fopen(filePath, "wb");
if (fp == NULL)
{
free(pText);
return -1;
}
fwrite(pText, nFileSize, 1, fp);
fclose(fp);
// 释放内存
free(pText);
return 0;
}
解密代码,参数相同
int breakpass(char* filePath)
{
FILE* fp = NULL;
char* pText = NULL;
int nFileSize = 0;
int nKeyLength = strlen(KEY);
// 打开文件
fp = fopen(filePath, "rb");
if (fp == NULL)
{
printf("Open file failed.\n");
return -1;
}
// 获取文件大小
fseek(fp, 0L, SEEK_END);
nFileSize = ftell(fp);
fseek(fp, 0L, SEEK_SET);
// 分配存储文件内容的缓冲区
pText = (char*)malloc(nFileSize);
if (pText == NULL)
{
fclose(fp);
return -1;
}
// 读取文件内容
fread(pText, nFileSize, 1, fp);
fclose(fp);
// 解密文件内容
for (int i = 0; i < nFileSize; i++)
{
pText[i] = pText[i] ^ KEY[i % nKeyLength]; // 逐个字节异或密码
}
// 将解密后的文件内容写回到原文件
fp = fopen(filePath, "wb");
if (fp == NULL)
{
free(pText);
return -1;
}
fwrite(pText, nFileSize, 1, fp);
fclose(fp);
// 释放内存
free(pText);
return 0;
}
用到的,麻烦点赞收藏and关注,谢谢配合