知道了数据库的内部结构,对其进行加密、解密是相当容易的。数据库的头32个字节是数据库参数区,对于数据库的完整性来说极为重要。本节的加密程序采用异或常数法,即对头32个字节的重要地方进行异或加密。要想扩充,可把加密区域扩大到记录结构表区,解密时只需再执行一次程序。
加密数据库的程序源代码如下:
#include <stdio.h>
#include <stdlib.h>
void main(int argc,char* argv[])
{
int data[16];
char fname[12];
FILE* fp;
if(argc<2)
{
printf("请输入数据库文件的完整名称!\n");
scanf("%s",fname);
if((fp=fopen(fname,"r+b"))==NULL)
{
printf("不能打开数据库文件%s!\n",fname);
exit(1);
}
else
{
if((fp=fopen(argv[1],"r+b"))==NULL)
{
printf("不能打开数据库文件%s!\n",argv[1]);
exit(1);
}
}
}
fread(data,sizeof(int),16,fp);
//加密重要数据项
data[2] ^= 0xa1;
data[3] ^= 0xb2;
data[4] ^= 0xc3;
data[5] ^= 0xd4;
fseek(fp,ol,SEEK_SET);
fwrite(data,sizeof(int),16,fp);
fclose(fp);
}