| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 744 人关注过本帖
标题:用位异或加密文件
只看楼主 加入收藏
lklqlk1991
Rank: 2
等 级:论坛游民
帖 子:32
专家分:16
注 册:2009-10-15
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:2 
用位异或加密文件
这是一个用位异或加密文件的程序。能不能帮我仔细看一下,感激不尽,小弟我想这个问题好久了
#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
tdy1006
Rank: 4
等 级:业余侠客
帖 子:173
专家分:240
注 册:2009-5-13
收藏
得分:20 
程序代码:
#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);
        if(!feof(fp1))
            fputc(c^password[i++],fp2);
        if(i==j)
            i=0;
    }
    fclose(fp1);
    fclose(fp2);
}
void 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);
            if(!feof(fp))
                outfile[k++]=c^password[i++];
            if(i==j)
                i=0;
        }
        outfile[k]='\0';
        printf("%s",outfile);
        getch();
    }

}

2009-10-31 21:43
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.030964 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved