程序需求:
恺撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:????????????????????????????????????????????????????????????????????????????????????????????????
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z????????????????????????????????????????????????????????????????????????????????????????????????
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C????????????????????????????????????????????????????????????????????????????????????????????????
用户可输入大小写字母及其余字符,其余字符不进行加密处理。
项目分析:
对于原文字符P,其密文字符C满足如下条件:C = (P+3) mod 26????????????????????????????????????????????????????????????????????????????????????????????????,解密方法反之,即:P = (C-3) mod 26????????????????????????????????????????????????????????????????????????????????????????????????。为简化程序,我选择使用字符的ASCII码来判断字符是否应从‘1’开始。
基于此,该程序加密代码应为:
def enc(s): for i in range(len(s)): n=ord(s[i]) if 96<n<123 or 64<n<91: if 87<n<91 or 119<n<123: n=n-23 print(chr(n),end=‘‘) else: print(chr(n+3),end=‘‘) else: print(chr(n),end=‘‘)
其中if 87<n<91 or 119<n<123:用来判断字符是否为X(x),Y(y),Z(z),若是,输出减去23后的字符;若不是,输出加上3后的字符。
解密代码应为:
def dec(s): for i in range(len(s)): n=ord(s[i]) if 96<n<123 or 64<n<91: if 96<n<100 or 64<n<68: n=n+23 print(chr(n),end=‘‘) else: print(chr(n-3),end=‘‘) else: print(chr(n),end=‘‘)
其中if 96<n<100 or 64<n<68:用来判断字符是否为A(a),B(b),C(c),若是,输出加上23后的字符;若不是,输出减去3后的字符。
调试结果如下:
写在最后:
各位同学也可以根据此来改变加密解密的方式写出属于自己的一套电文程序。