C语言编程: 文件移位加密与解密。

总体设计:从键盘输入一个字符串(仅限于小写英文字母),根据密钥(用户从键盘输入,可在1-6范围内)将对应字符进行移位操作即可加密,解密时移动相反。如加密:设原文为abcd... 总体设计:从键盘输入一个字符串(仅限于小写英文字母),根据密钥(用户从键盘输入,可在1-6范围内)将对应字符进行移位操作即可加密,解密时移动相反。
如加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可得到密文(乱码)fghijkl。
如解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前移动5位(注a后接z),可得到原文abcdef。
调试分析过程描述:
如输入的字符串为“hijklmnopq”
输入1 ←则加密:
即会显示“mnopqrstuv”
展开
 我来答
Sky_AC_W
2009-04-27 · TA获得超过127个赞
知道答主
回答量:42
采纳率:0%
帮助的人:0
展开全部
这样就可以了
#include<stdio.h>
void code(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-97+key)%26;
p++;
}
}
void uncode(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-71-key)%26;
p++;
}
}
main()
{
char str[100];
int n,key;
printf("输入密匙:");
scanf("%d",&key);
printf("输入1加密,输入2解密:");
scanf("%d",&n);
printf("输入字符串:");
scanf("%s",str);
if(n==1)
{
code(str,key);
printf("密文为%s\n",str);
}
else if(n==2)
{
uncode(str,key);
printf("原文为%s\n",str);
}
}
zhjiemm
2009-04-27 · TA获得超过2643个赞
知道大有可为答主
回答量:1834
采纳率:75%
帮助的人:720万
展开全部
直接对字符串按字符加减密钥的位数就可以了。

#include <iostream.h>
#define MAX 1000
//加密
char * Encryption(char *E,int Key)
{
for(int i=0;*(E+i);i++)
{
*(E+i) += Key;
if(*(E+i)>'z')
*(E+i) -= ('z'-'a')+1;
}

return E;
}
//解密
char * Decryption(char *E,int Key)
{
for(int i=0;*(E+i);i++)
{
*(E+i) -= Key;
if(*(E+i)<'a')
*(E+i) += ('z'-'a')+1;
}
return E;
}
void main()
{
char a[MAX];
int key;
cout<<"输入字符串:"<<endl;
cin >> a;
cout<<"输入密钥:"<<endl;
cin >>key;

cout<<"加密输出:"<<Encryption(a,key)<<endl;
cout<<"解密输出:"<<Decryption(a,key)<<endl;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hanwt139
2009-04-27 · TA获得超过843个赞
知道小有建树答主
回答量:1144
采纳率:100%
帮助的人:703万
展开全部
每个英文字母都有一个对应的十进制值
A--Z对应65--90
a--z对应97--122
可以直接对char类型的变量进行加减的操作
比如:
int one,two = a;

one = two-32;
此时printf("%c,%d",one,one);将输出A,65
程序输出字符还是数字,是通过%c、%d来控制的。
知道这些以后,我想你应该很容易就能做出来了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1f50dbcda
2009-04-27 · TA获得超过131个赞
知道小有建树答主
回答量:293
采纳率:0%
帮助的人:166万
展开全部
剽窃一楼的想法 写了个
#include<stdio.h>
#include<string.h>

void jiami(char *s,int num);

int main()
{
char str[20];
int num;

printf("输入字符串:");
scanf("%20s",str);
printf("\n输入移动位数:");
scanf("%d",&num);
jiami(str,num);
return 0;

}

void jiami(char *s,int num)
{
char *ss=s;
while(*s!='\0')
{
*s=(*s)%122+num; //算法错误 不好意思 我再想想
s++;
}
s=ss;
printf("\n加密后的字符串 %s\n",s);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逍遥痞子草
2009-04-27
知道答主
回答量:59
采纳率:0%
帮助的人:0
展开全部
ACM题汗
用取模的方法 你那个数%25就是+A就是了
往回算的时候用你那个数 减去 %25
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式