C 文件加密
注意写文件时应注意少和磁盘打交道
#include <stdio.h>
#include <Windows.h>
#pragma warning(disable:4996)
#define FILESIZE 100*1024*1024
// 函数功能:计算文本的大小
// 函数参数:文件指针
// 函数返回:文本大小
int GetFilesSize(FILE *fp)
{
if (fp == NULL)
return 0;
int nFileLen,flen;
flen = ftell(fp);
fseek(fp,0,SEEK_SET);
fseek(fp,0,SEEK_END);
nFileLen = ftell(fp);
fseek(fp,flen,SEEK_SET);
return nFileLen;
}
// 函数功能:加密文件
// 函数参数:文本名称地址
// 函数返回:新文本
int myEncryptFile(char *filename)
{
FILE *fp;
BYTE *buf,*p,*q;
int nFileLen, i;
// 剔除不可用的的指针
if((fp = fopen(filename,"rb+")) == NULL)
{
printf("%s open file failed.\n", filename);
return 0;
}
nFileLen = GetFilesSize(fp);
if (nFileLen == 0 || nFileLen > FILESIZE)
{
fclose(fp);
return 0;
}
buf = (BYTE*)malloc(nFileLen + 0x1000);
memset(buf, 0, nFileLen + 0x1000);
// 开辟空间
fseek(fp, 0, SEEK_SET);
fread(buf, 1, nFileLen, fp);
// 再将指针移到文件首段
p = buf;
q = buf;
// 对文件每个字符进行加密处理
for (i = 0; i < nFileLen; i++)
*p++ ^= 0x55;
// 写文件
fseek(fp, 0, SEEK_SET);
fwrite(q, 1, nFileLen,fp);
// while(p < buf + nFileLen)
// {
// *p = *p^0x55;
// // fwrite(p,1,1,fp);
// p++;
// }
// // 对编译好文本的覆盖原文本
// while(q < buf + nFileLen)
// {
// fwrite(q,1,1,fp);
// q++;
// }
free(buf);
fclose(fp);
return 1;
}
// 函数功能:帮助
void Help()
{
printf("Encryptingfile V1.0 written by HeKai 2014.10.10.\n");
printf("Encryptingfile [filepath]\n");
}
// 主函数
int main (int argc, char** argv)
{
// 显示帮助
Help();
if (argc <= 1)
{
printf("Please input param.\n\n\n");
return 0;
}
// 加密文件
if(myEncryptFile(argv[1]) == 1)
{
printf("Encryp success !\n");
}
else
{
printf("Encryp failed.\n");
}
return 1;
}
本文来自博客园,作者:赫凯,转载请注明原文链接:https://www.cnblogs.com/heKaiii/p/15491368.html

浙公网安备 33010602011771号