#include<stdio.h>
#include<string.h>
#include<malloc.h>
void main()
{
FILE *in,*out;
char file_name1[50],file_name2[50];
unsigned int i,j,m,n;
char *pch,ch[1000],*temp;
fflush(stdin);
printf ("请输入你要保密的文字: \n") ;
pch=ch;
gets(pch) ;
for (m=0,temp=(char *)malloc(8*strlen(ch));m<strlen(ch);pch++,m++)
for (n=0;n<8;n++)
temp[8*m+n]=0x01&*pch>>n;//以上嵌套循环体的作用是把输入的文字信息按位离散到一个动态数组中。3 /
printf("请输入预保存在的文件名:\n");
gets(file_name1);
if ((in=fopen(file_name1,"rb"))==NULL)
{
printf("无法打开原始位图文件。\n");
return;
}
printf("请输入加密后的文件名:\n");
gets(file_name2);
if ((out=fopen(file_name2,"wb"))==NULL)
{
printf ("无法打开加密位图文件。\n");
return;
}
for(i=1,j=0;!feof(in);i++)
{
if (i<=54)
fputc(fgetc(in),out) ; //位图文件的前54个字节保持原样不变保存到新文件中3 /
else
{
if(j<8*strlen(ch))
fputc((fgetc(in)&0xfe)+temp[j],out);// 把密文数据逐个附加到该位图文件“实际位图数据”部分的每一个字节的末位3 /
else
fputc(fgetc(in)&0xfe,out);
j++;
}
}
fclose(in) ;
fclose(out) ;
printf("加密成功!\n");
}