关于凯撒密码的一些问题

来源:互联网 发布:bbc纪录片 知乎 编辑:程序博客网 时间:2024/05/21 07:10

关于凯撒密码的一些问题,谁能给我解释下这段程序啊? 谢谢了,最好是每句都解释下。

悬赏分:10 - 解决时间:2009-10-22 16:41

#include <stdio.h>
main()
{
   char M[100];
   char C[100];
   int K = 3, i;
   printf("请输入明文M(注意不要输入空白串)\n");
   gets(M);
   for(i = 0; M[i] != '\0'; i++)
   C[i] = (M[i] - 'a' + K) % 26 + 'a';
   C[i] = '\0';
   printf("结果是:\n%s\n",C);
}
=========================================
最佳答案:

这个程序,允许输入一串小写英文,如:goodbye,然后将它们变成密码:jrrgebh。
变换规律是:按照英文字母表,明文字母向下第三个,就是密码。
执行过程见下面的插图。

 关于凯撒密码的一些问题 - 非著名博主 - 电子信息角落

插图链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/20220f02fb654eb9d53f7c57.html

各个语句的说明如下:
char M[100];               //明文、密码的存放空间
char C[100];
int K = 3, i;              //K=3, 向下第三个
printf("请输入明文(注意不要输入空白串):\n");//显示提示
gets(M);                                     //输入
for(i = 0; M[i] != '\0'; i++)                //逐个字母进行变换
  C[i] = (M[i] - 'a' + K) % 26 + 'a';        //加密计算公式
C[i] = '\0';                                 //密码末尾加上终止符号
printf("结果是:\n%s\n", C);                 //显示密码
//-------------------------------------------------------------
回答者:做而论道 - 八级   2009-10-18 23:45
提问者对于答案的评价:非常感谢你的回答,谢谢啊
其他回答:楼上真是个细心的人 赞一个  2009-10-19 09:41
原文网址:http://zhidao.baidu.com/question/122000309.html
=========================================

后记:

题目中给出的程序,还是有不足的。
当输入大、小写混合的字符串的时候,加密的结果就是有些混乱的。
改正的程序如下:

#include <stdio.h>
void main()
{
   char M[100], C[100], K = 4, i;
   printf("请输入明文(注意不要输入空白串):\n");
   gets(M);
   for(i = 0; M[i] != '\0'; i++)
     if (M[i] > 96)  C[i] = (M[i] - 'a' + K) % 26 + 'a';
     else   C[i] = (M[i] - 'A' + K) % 26 + 'A';
   C[i] = '\0';
   printf("各个字符顺次加4的结果是:\n%s\n",C);
}

上述程序对大写、小写的字母,分别进行了循环移位,这就不会出现大小混合移位的情况了。

当然,本程序仍有不足:当输入数字的时候,密码还是不理想。
呵呵,这个缺陷,看看各位网友是否能够补足。
=========================================

 

0 0
原创粉丝点击