永发信息网

一个c语言加密问题,请高手赐教!

答案:2  悬赏:80  手机版
解决时间 2021-04-23 10:16

写了一个加密小程序,用了循环嵌套,我指定了结束循环的条件,可就是结束不了,一个不到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);
}

}

最佳答案

你的循环有问题,你是对一位字节循环加八次密,而不是逐字节循环加密

全部回答

看到你的循环while(!feof(fp1)),但是我不知道哪儿错了

楼主可以去CSDN找找答案

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
WOW现在有付费转F不?
哪首英文歌第一句歌词是“It's amazing"
电脑蓝牙软件下载
关于干活的诗句
已经拿到了外校保研录取通知书,本校会给外保
joyo dr.j电子管音箱怎么样
德和珠宝金行在什么地方啊,我要过去处理事情
DNF的级品装备有什么?
为什么自己的第一次都很难忘
施华蔻羊绒脂滋养发膜怎么用,施华蔻羊绒脂发
传闻中的七公主黄太子的手机是什么牌
得巴沟地址有知道的么?有点事想过去
天龙八部明教怎么加点才强,后期又有用?
奥比岛魔法任务迷宫魔罩
孤独终老上一句,我只是想让你找到一个对的人,
推荐资讯
帮多找些点卡平台?
80GB神舟新瑞D300电脑升级 更换配置
点肌平台是传销吗
蜀门OL青城打45副本全攻略尤其是烈火老祖
QQ等级最高是多少啊?
把五笔怎么打字,乘五笔怎么打字
哪位能给我做个证书啊!不胜感激,N73的手机
英雄岛 24级物理带什么宠好
神奇动物在哪里剧情超详细介绍!!播音稿那种
心脏疼痛的时候可以用什么办法来减轻疼痛?
有什么G是不被洗号。不会盗号的?
MYC是什么意思?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?