文件的获取大小与文件的密码都需要注意 使用 int ch = fgetc(); 这样可以避免因加密或解密造成的溢出,损坏文件。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//加密码最好使用 二进制,否则会出现一些问题。
//这儿的 获取字符也应该使用 int ch = fgetc(pfr); 使用 int 类型而不要使用 char .
//还有一个需要注意的地方就是:\n 在写到文件中是变成 \n-->\r\n, 而 \n读出来的又是 \r\n-->\n
void jiajiepass(char *path, char *newpath, char *pw)
{
FILE *pfr = fopen(path, "rb");
FILE *pfw = fopen(newpath, "wb");
if (pfr == NULL || pfw == NULL)
{
printf("文件读取或打开失败!\n");
return;
}
int length = strlen(pw);
int i = 0;
int ch; //不要使用 char 类型,否则会出错。
while ((ch=fgetc(pfr))!=EOF)
{
if (i > length)
i = 0;
fputc(ch^pw[i], pfw);
}
fclose(pfr);
fclose(pfw);
}
int getFileSize(char *path)
{
FILE *pfr = fopen(path, "rb");
if (pfr == NULL )
{
printf("打开失败!\n");
return -1;
}
int sum = -1; //这儿的用 -1 是因为文件最后的一个EOF 也计算在内了。
while (!feof(pfr))
{
int ch = fgetc(pfr); //这儿一定要使用 int
sum++;
}
return sum;
}
char *path = "I:\\fudan\\工具\\dllinject\\DllInject.exe";
char *pathjia = "I:\\fudan\\工具\\dllinject\\DllInjectjia.exe";
char *pathjie = "I:\\fudan\\工具\\dllinject\\DllInjectjie.exe";
char *pw = "password";
void main()
{
//printf("%d\n", getFileSize(path));
char password[20];
printf("请输入加密、解密密码:");
scanf("%s", password);
printf("加密中...\n");
jiajiepass(path, pathjia, password);
printf("解密中...\n");
jiajiepass(pathjia, pathjie, password);
system("pause");
}