调试了几天了,一段有问题的程序,帮忙调试一下,谢谢
下面是整个程序,其中DES函数已经验证正确,先读出8个字节,然后进行DES算法(DES算法不改变文件大小,只是输入8个,输出8个,),再写入另一个文件,可是最后文件的大小居然变化了,请教高手看看我这个程序有没有文件读写的错误.
main()
{
FILE *fp;
FILE * fpp;
long count,count1;
int flag,i,t,num=0,flag1;
unsigned char source[8],dest[8],inkey[17];
char pt[100];
for(i=0;i <16;i++)
if(i%2==0)inkey[i]= '1 ';
else inkey[i]= '0 ';
inkey[16]= '\0 ';
printf( "%s\n ",inkey);
char ch, infile[100],outfile[100];
printf( "加密?解密?(加密输入1,解密输入0):\n ");
scanf( "%d ",&flag);
flag1=1-flag;
if((fp=fopen( "xiang.exe ", "rb "))==NULL)
{ printf( "can 't open file ");
exit(0);
}
printf( "请输入加密/解密的文件名称:\n ");
fseek(fp,0,2);
count=ftell(fp);
printf( "%d\n ",count);
if(count==0)
{
printf( "文件不存在内容,不需要操作! ");
return(0);
}
fclose(fp);
if((fp=fopen( "xiang.exe ", "rb "))==NULL)
{ printf( "can 't open file ");
exit(0);
}
printf( "请输入目标的文件名称:\n ");
scanf( "%s ",outfile);
printf( "请输入加密/解密的密钥:\n ");
scanf( "%s ",inkey);
printf( "%s\n ",infile);
if(flag==1)
{
num=count%8;
printf( "%d\n ",num);
}
count1=count/8;
printf( "%d\n ",count1);
if((fpp=fopen(outfile, "w "))==NULL) printf( "找不到指定的文件\n ");
t=0;
while(count1> 0)
{
for(i=0;i <8;i++)
{
fread(pt,sizeof(char),1,fp);
printf( "%d\n ",count1);
source[i]=pt[0];
printf( "%c ",source[i]);
}
des(source,dest,inkey,flag);
des(dest,dest,(inkey+8),flag1);
des(dest,dest,inkey,flag);
count1--;
for(i=0;i <8;i++)
{
fwrite((dest+i),sizeof(char),1,fpp);
}
t++;
}
if(num!=0)
{
while(num> 0)
{
i=0;
fread(pt,sizeof(char),1,fp);
source[i]=pt[0];
i++;
num--;
}
while(i <8)
{
source[i]= ' ';
i++;
}
des(source,dest,inkey,flag);
des(dest,dest,(inkey+8),flag1);
des(dest,dest,inkey,flag);
printf( "%c ",dest[1]);
printf( "mabimabimabimabi ");
for(i=0;i <8;i++)
fwrite((dest+i),sizeof(char),1,fpp);
}
fclose(fpp);
fclose(fp);
printf( "rrrrrrrrrrrrr%d\n ",t);
return(0);
}
[解决办法]
DES算法必须是8个字节做为一个block,加密
如果你的源文件的大小,不是8的整数倍,那么程序会用空格补齐到8的整数倍,然后再加密。比如,一个12个字节大小的文件,会补齐到16字节,然后再加密,加密后的文件是16字节大小的。
[解决办法]
mark
[解决办法]
Maybe :
if((fpp=fopen(outfile, "w "))==NULL)
===> if((fpp=fopen(outfile, "w+b "))==NULL) ??????
[解决办法]
学习
[解决办法]
wb