恺撒密码
恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推,如图所示
所以整个字母表的对应关系如下:
原文: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
这个上面的偏移量3就是密钥,它是算法加密解密的核心,所以我们用p代替字符串,key代表密钥,得出以下结论
加密算法C:C=E(key,p)= (p+key)(mod26)
解密算法:p=E(key,C)= (C-k)mod(26)
为了解决用户可能使用的输入包含大小写字母azAZ、空格,所以我们要做以下编程,对输入字符串进行恺撒密码加密解密
对于输出的大小写和字母直接输出结果,其中空格不用进行加密处理。使用input()获得输出
加密解密的流程图
代码实现:
def getMode():
while 1:
print('请选择加密或解密模式:')
print('加密e')
print('解密d')
mode = input()
if mode in "e d".split(' ',1):
return mode
else:
print("请重新输入:")
def getMessage():
print('请输入要执行的信息:')
return input()
def getKey():
print("请输入密钥:")
key = int(input())
return key
def encrypt(mode,message,key):
if mode == 'd':
key = -key
d = {}
for c in (65, 97):
for i in range(26):
d[chr(i+c)] = chr((i+key) % 26 + c)
print("结果为:")
print("".join([d.get(c, c) for c in message])) #这里套用了this.py文件
mode = getMode()
message = getMessage()
key = getKey()
encrypt(mode,message,key)
运行结果: