中易网

C语言中最简单的字符串加密解密问题!!!!希望大家帮帮忙,分不是问题 !!

答案:3  悬赏:60  
解决时间 2021-01-17 19:22
  • 提问者网友:杀生予夺
  • 2021-01-17 09:38
C语言中最简单的字符串加密解密问题!!!!希望大家帮帮忙,分不是问题 !!
最佳答案
  • 二级知识专家网友:几近狂妄
  • 2021-01-17 10:40
加密解密的算法都没错,错的是解密程序里的文件操作方法。
rewind(fp)没有必要。因为fp已经被close了。
一般不推荐同时对一个文件又读又写,因为这样会导致很多缓冲区同步的问题。比如:
fputc()和getc()之间,必须要调用fflush(fp);
即使这样,还是会有问题。比如回车,getc()可能会返回两个字符,\n和\a。但是用fputc()写入的时候,分别写入\n和\a会把第二行第一个字符覆盖掉。

正确的做法是:
先把解密的数据保存到字符串里,全部结束之后,一次性把解密完的字符串写到文件里去。

void main()
{
char ch,name[30];
char content[1000];
int n = 0;
FILE *fp;
printf("name:\a");
gets(name);
fp = fopen(name,"r+");
if(fp==NULL)
{
printf("No file: %s!\n\a",name);
return;
}
ch = getc(fp);
while(ch!=EOF)
{
if((isalpha(ch))!=0)
{
if((ch >= 'a' && ch <= 'd') || (ch >= 'A' && ch <='D'))
ch = ch + 22;
else
ch = ch - 4;
}
content[n++] = ch;
ch = getc(fp);
//ch = getc(fp);
}
content[n] = 0;
rewind(fp);
fprintf(fp, "%s", content);
fclose(fp);

printf("%s ok\a\n",name);
printf("content: %s\n", content);
printf("\n");
}
全部回答
  • 1楼网友:毛毛
  • 2021-01-17 12:32
wkjf
  • 2楼网友:轻熟杀无赦
  • 2021-01-17 11:50
问题在于,你的加密算法是不可逆的,也就是说,无法保证解密。
比如原文是aw,加密之后是aa,你解密成什么啊?ww?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息