恺撒密码拓展
恺撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符,即循环左移3位,对应关系如下:
原文: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
基础中文字符的Unicode编码范围是[0x4e00,0x9fa5],共20902个字符。请以10451位循环移位数量,编写中文文本的类恺撒密码加解密方法。
原文字符P,其密文字符C满足如下条件:
C = ( P + 10451 ) mod 20902
解密与加密方法一致,满足:
P = ( C + 10451 ) mod 20902
标点符号、英文字母不加密。
下面是一段测试文本:
输入(加密前):全国计算机等级考试二级Python语言程序设计
输出(加密后):稻翐拎勄逍剶嗔地挂睟嗔Python挚愭儸蝢拫拎
Python代码
s = input("输入:")
ls = list(s)
lt = []
for i in range(len(ls)):
if ord(ls[i]) in range(0x4e00,0x9fa6):
t = ord(ls[i])-0x4e00 #先减去底数
ls[i] = chr((t+10451)%20902 +0x4e00) #算出循环偏移量,再加底数
lt.append(ls[i])
else:
lt.append(ls[i])
print("输出:",end="")
for j in range(len(lt)):
print(lt[j],end ="")
#循环一次加密,循环两次解密