首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

调试了几天了,一段有有关问题的程序,帮忙调试一下,多谢

2012-02-26 
调试了几天了,一段有问题的程序,帮忙调试一下,谢谢下面是整个程序,其中DES函数已经验证正确,先读出8个字节

调试了几天了,一段有问题的程序,帮忙调试一下,谢谢
下面是整个程序,其中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

热点排行