|
我先给你解释这一段-
- for(i=0;i<=110;i++)
- { cin>>c;
- c=t.rule(n,c);
- t.show(c);
- }
复制代码 t是我们定义的一个类,Rule就是这个类的一个函数,目的就是把输入的每一个字符用凯撒密码加密
n是他的密钥
我给你解释一下凯撒密码,凯撒密码是一种最简单的加密,其方式就是把每一个字符偏移一个个固定的量。
比如密钥是3的时候,每个字符就会左移3位,字母表就会这样
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:XYZABCDEFGHIJKLMNOPQRSTUVW
你注意到了没有,前三个字符ABC减去3以后,就会跑到字符表外面去,那样的话家把它加上一个26(因为是26个字符么),那他就是XYZ了。(字母的ASCII码都是顺序的)- aa=aa-n;
- if(aa>='Z'&&aa<='Z'-n||aa>='z'&&aa<='z'-n) aa=aa-26;
- if(aa>='A'-n &&aa<'A'||aa>='a'-n &&aa<'a') aa=aa+26;
复制代码 第二个判断句- if(aa>='A'-n &&aa<'A'||aa>='a'-n &&aa<'a') aa=aa+26;
复制代码 就是干这个的,意思就是最初的aa大于等于‘A’小于‘A’+n的时候(如果密钥是3,那就是A-C这几个字符),那就把aa这个数加上26,后面那个判断是说字母小写的情况。
第一个判断句- if(aa>='Z'&&aa<='Z'-n||aa>='z'&&aa<='z'-n) aa=aa-26;
复制代码 又是干嘛的呢?它是处理字符右移的情况,这时候n是负值,最后的结果要减去26.
没想到你这么晚了还没睡,没能及时回复,让你久等,抱歉啦。
快去睡觉吧,明天要上学,以后要啥问题,都可以让你老爹来问。
顺便说一声,你真棒!
编好了程序,输入这段字试试看,密钥是-3.
Brx duh d vxshunlg
[ 本帖最后由 qqyou 于 2009-11-2 00:00 编辑 ] |
评分
-
查看全部评分
|