写了一个加密小程序,用了循环嵌套,我指定了结束循环的条件,可就是结束不了,一个不到1k的文本硬是给我加成了900多M,郁闷。请高手看一下
下面是我的算法:
用户输入一串阿拉伯数字(长度<=sizeof(file)),例如12345,即密钥,然后逐字节读取文件内容并移位加密,第一字节移动1位,第二字节移动2位,第三字节移动3位,依此类推,移动位数由密钥的各位决定。当移位到第n+1字节时(n=密钥位数),移动位数继续从密钥第一位开始,循环移位加密至文件最后一字节。每字节移位方向由当前字节移动的位数与2取与的结果决定。加密时取与结果位0则左移,为1则右移。解密同加密类似,只是取与结果位0右移,取与结果位1左移。
我把加密部分单独提出来了,没有错误,代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void file(char *in_filename,char *passwrd,char *out_filename);
void main(int argc,char *argv[])
{
char in_filename[30];
char out_filename[30];
char passward[8];
if(argc!=3)
{
printf("\n请输入源文件的路径:\n");
gets(in_filename);
printf("password:\n");
gets(passward);
printf("请输入目标文件的路径:\n");
gets(out_filename);
file(in_filename,passward,out_filename);
}
else
{
strcpy(in_filename,argv[1]);
strcpy(passward,argv[2]);
strcpy(out_filename,argv[3]);
file(in_filename,passward,out_filename);
}
}
void file(char *in_filename,char *passward,char *out_filename)
{
FILE *fp1,*fp2;
char ch;
int i=0;
//int j=0;
fp1=fopen(in_filename,"rb");
if(fp1==NULL)
{
printf("源文件打开失败!\n");
exit(1);
}
fp2=fopen(out_filename,"wb");
if(fp2==NULL)
{
printf("目标文件打开或写入失败!\n");
exit(1);
}
ch=fgetc(fp1);
while(!feof(fp1))
{
for(i=0; ;i++)
{
if(((passward[i%8])%2)==0)
{
fputc(ch>>passward[i%8],fp2);
}
else
{
fputc(ch<<passward[i%8],fp2);
}
}
fclose(fp1);
fclose(fp2);
}
}