| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 744 人关注过本帖
标题:用位异或加密文件
取消只看楼主 加入收藏
lklqlk1991
Rank: 2
等 级:论坛游民
帖 子:32
专家分:16
注 册:2009-10-15
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:1 
用位异或加密文件
这是一个用位异或加密文件的程序。能不能帮我仔细看一下,感激不尽,小弟我想这个问题好久了
#include<stdio.h>
void jiami(char*infile,char*password,char*outfile)
{
char c,*cc=&c;int i,j=strlen(password);
FILE*fp1,*fp2;
if((fp1=fopen(infile,"rb"))==0)
{
printf("cannot open infile\n");
getch();
exit(0);
}


if((fp2=fopen(outfile,"wb"))==0)
{
printf("cannot open outfile\n");
getch();
exit(0);
}
i=0;
while(!feof(fp1))
{
 fread(cc,sizeof(char),1,fp1);
fputc(c^password[i++],fp2);
if(i==j)
   i=0;
   }
fclose(fp1);
fclose(fp2);
}
main()
{
FILE*fp;
char a[20],b;
int i,j,k=0;
char c,*cc=&c;
char infile[20];
char outfile[20];
char password[10];
printf("choose\n");
printf("1.jiami\n");
printf("2.jiemi\n");
b=getchar();
getchar();
if(b=='1')
{
printf("input in file\n");
do
{
scanf("%s",infile);
if(strlen(infile)>19)
   printf("too long\n");
}while(strlen(infile)>19);
printf("outfile\n");
do {
scanf("%s",outfile);
if(strlen(outfile)>19)
   printf("too long\n");
}while(strlen(outfile)>19);
printf("input password\n");
do
{
scanf("%s",password);
if(strlen(password)>10)
   printf("too long\n");
}while(strlen(password)>10);
jiami(infile,password,outfile);
printf("successful\n");
getch();
}
else
{
printf("infile\n");
scanf("%s",a);
fp=fopen(a,"rt");
if(fp==0)
{
   printf("error\n");
   getch();
   exit(0);
   }
printf("password\n");
do
{
scanf("%s",password);
if(strlen(password)>10)
   printf("too long\n");
}while(strlen(password)>10);
j=strlen(password);
i=0;
while(!feof(fp))

   {
    fread(cc,sizeof(char),1,fp);
    outfile[k++]=c^password[i++];
    if(i==j)
     i=0;
     }
     outfile[k]='\0';
     printf("%s",outfile);
   getch();
   }
 
}
以上编译能通过,但是打开加密文件对它解密却多显示出二个字符,哪里错了,哪位大哥帮我运行一下除下错

搜索更多相关主题的帖子: 文件 
2009-10-31 20:40
lklqlk1991
Rank: 2
等 级:论坛游民
帖 子:32
专家分:16
注 册:2009-10-15
收藏
得分:0 
这是为什么呢?当读到最后一个字符,还读时到了文件尾,不是把文件结束符也读进去异或了吧?能不能给讲解一下到底错在哪里。程序是对了。小弟还是不太明白,能不能道个明白,我菜鸟来的。while(!feof(fp1))
    {
        fread(cc,sizeof(char),1,fp1);
        if(!feof(fp1))
            fputc(c^password[i++],fp2);
        if(i==j)
            i=0;
    }

while(!feof(fp1))
{
fread(cc,sizeof(char),1,fp1);
fputc(c^password[i++],fp2);
if(i==j)
   i=0;
   }
到底哪里不同????

[ 本帖最后由 lklqlk1991 于 2009-11-1 08:52 编辑 ]
2009-11-01 08:43
快速回复:用位异或加密文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012641 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved