Python字符映射实现凯撒加密

来源 :电脑报 | 被引量 : 0次 | 上传用户:aqcnbbz1
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  Python提供了比较丰富的字符串常用方法,其中的maketrance()和translate()是一对专门用来生成字符映射表和根据映射表进行字符转换的方法,可以同时处理多个不同的字符,经常应用于字符串的加密和解密。
  1.字符映射加密的简单应用举例
  maketrance()方法一般用于创建字符映射的转换表,两个参数为长度一致的字符串,作用是将前面字符串中的字符转换成后面字符串中的对应字符;而translate()方法则是配合maketrance()方法实现字符串内容的替换。在此编写一个简单的英文加密小程序。
  首先建立变量table并赋值为“‘’.maketrans(‘abcdefg’,‘nmlkjih’)”,作用是利用建立maketrance()方法来建立字符映射表,把第一个参数“abcdefg”中的各个字符依次替换为“nmlkjih”中的各个字符,即a映射为n、b映射为m、c映射为l……接着建立变量s,其值为使用input获取用户从键盘输入的一句英文;然后建立变量miwen,其值为“s.translate(table)”,根据之前使用maketrance()方法创建的table映射表完成对应字符的一一映射;最后,使用print语句输出变量miwen,即“加密后的密文”。
  运行程序,按照提示输入经典测试句:“The quick brown fox jumps over a lazy dog.”(这句话包含全部字母),得到加密后的密文结果:“Thj quilk mrown iox jumps ovjr n lnzy koh.”(如图1)。原句中的“abcdefg”七个字母都被分别替换为“nmlkjih”,实现了加密。



  2.字符映射的“非完全”解密法
  既然利用maketrance()方法的加密是将两个字符串进行映射替换,那么理论上可以将两个字符串位置互换来实现解密。即table变量的值变成“‘’.maketrans(‘nmlkjih’,‘abcdefg’)”,其他的内容基本不变,只修改一下对应的提示信息。在“请输入待解密的一句英文:”提示后面输入刚刚得到的加密句子:“Thj quilk mrown iox jumps ovjr n lnzy koh.”,回车后得到解密后的原文是:“Tge qufcd browa fox eubps over a cazy dog.”,并未还原最初的经典测试句子(如图2)。那么究竟错出在哪儿呢?



  那是因为无论是加密还是解密时,使用maketrance()方法建立的字符映射表并不全面,没有将所有的大小写英文字母都进行映射,只是建立了7个字母之间的相互映射(即加密与解密)。解密时,程序会机械地将密文中的所有“nmlkjih”这七个字母还原为“abcdefg”,但密文中有些“nmlkjih”最初并不是由“abcdefg”加密而来的。想要实现真正的解密,必须在加密时对所有的大小写英文字母进行逐一不重复的映射替换,其实凯撒加密就是一种通过字母移位的方式来加密信息的方法。
  3.字符映射实现凯撒加密
  首先使用“import string”语句导入string库,接着使用变量s来接收用户从键盘输入的待加密的英文。变量n是用来接收凯撒加密的移位要求,因为有26个英文字母,所以加密的有效移位数字共有25个(1-25);特别注意input语句接收的是字符串型数据,必须通过int来转换为整数。
  然后建立lower和upper两个变量,其值分别为26个英文小写字母(string.ascii_lowercase)和大写字母(string.ascii_uppercase),这是string库所提供的常量;同样,变量before的值为“string.ascii_letters”,也是string库中已经定义好的常量值,意思是所有的大小写英文字母。变量after则是利用了Python的“切片”操作,其中的“lower[n:] + lower[:n]”是完成英文小写字母的循环移位,而“upper[n:] + upper[:n]”则是大写字母的循环移位,移位的步长即用户之前从键盘上输入的数值n。
  建立变量table,其值为“‘’.maketrans(before,after)”,即包括所有大小写在内的英文字母完整映射表。最后,通过print语句输出凯撒加密后的密文信息“s.translate(table)”。
  运行程序,按照提示仍然输入那句经典测试句子。回车后,提示输入加密的移位数字,输入“6”,得到了加密后的密文“Znk waoiq hxuct lud pasvy ubkx g rgfe jum.”(如图3)。



  4.凱撒加密的解密方法
  由于程序中已经包括了所有的英文大小写字母,因此简单地修改table变量的值即可实现凯撒密码的解密,也就是将maketrance()方法的before和after两个参数进行位置互换即可。运行解密程序,输入刚刚加密后的结果,收到“解密的移位数字”,此时必须要输入之前加密时的移位数字“6”,才能得到正确的原文信息。如果输入其他的数字,比如“11”,就无法正确还原出之前未加密的原文,得到的是“Ocz lpdxf wmjri ajs ephkn jqzm v gvut yjb.”。
其他文献
同级PK:AMD锐龙7 5800X技术全面领先,综合性价比更为突出  其实,我们已经针对AMD锐龙5000处理器与第十代酷睿进行过多次比较,大家已经很清楚这一代锐龙处理器得益于技术全面領先的7nm ZEN3架构,已经全面反超第十代酷睿,不管是单核性能还是多核性能,优势都非常明显,同时在功耗控制方面也大幅领先,可以说在技术水平方面已经超越了竞品整整一代。  对于某些特定的专业设计应用来讲,例如Aft
期刊
开学了,你家的孩子是不是还挂念着寒假里玩的那些电脑游戏?开学就要让孩子收心了,不过仅仅依靠孩子的自律来控制玩电脑的时间是不靠谱的,使用粗暴的方式强行关机或者拔网线更是不合理的。其实用好Windows 10自带的系统组件,家长们就可以对孩子使用电脑进行有效的控制。总体控制——设置账户登录限制  孩子上学了,很多家长一般都只允许孩子在周末使用电脑,但是使用常规的电脑账户加密的方法并不实用,这样每次孩子
期刊
从年初开始,新品游戏本就接连不断地上市,的的确确给了我们很大的惊喜。尤其值得一提的是,多款机型的首发价格是加量不加价,当然,前提是你得抢购。而首发没有买的同学,现在可能已经发现了一件似曾相识的尴尬事儿:很多中高端机型都处于缺货状态。  咋办呢?也没有太好的办法,只能被迫当等等党了,或许还能安慰一下自己:等到后面,各家都上新品,那不是更好选择吗。但如果你的预算在五六千元价位,那么如今倒还有一些机型可
期刊
摘要 目的:探讨惠尔血溶液漱口治疗化疗引起口腔溃疡效果及分析。方法:采用自制的惠尔血溶液对恶性肿瘤引起的口腔溃疡进行治疗,用统计学方法对数据进行统计和分析。结果:恶性肿瘤引起的口腔溃疡,在经过应用了自制的惠尔血溶液后,症状明显改善,应用前后比较有统计学意义(P<0.01)。结论:对化疗引起的口腔溃疡在应用了自制的惠尔血溶液后,得到了有效的治疗,从而有效地改善了患者的生活质量。  关键词 自制的惠尔
期刊
摘要 现在医院里的病人都要测血压,水银柱台式血压计与腕式电子血压计在门诊用于健康体检者的准确性。  关键词 水银柱台式血压计;腕式电子血压计;血压;测量;原理
期刊
当我们遇到复杂问题时,最好能通过分析理解题目找出简单的方法来解决问题。今天我们一起来做一道Scratch竞赛题——“爬台阶问题”。  小明要上二楼,从一楼到二楼共十级台阶。这次小明突然想到一个问题:“我上楼时一步可以爬一级台阶也可以跨两级台阶,那么从一楼到二楼一共有多少种走法呢?”那么聪明的你可以帮小明用编程来解决这个问题吗?  首先要分析题目:假设每次爬1级台阶需要10步,这种解法用数字化来表示
期刊
摘要 目的:探讨重症监护室患者并发院内感染与侵袭性操作的相关性,为制定预防措施和护理干预提供科学依据。方法:对189例重症监护患者合并有气管插管、气管切开、中心静脉置管院内感染发生情况进行回顾性分析。结果:重症监护患者合并有气管插管、气管切开、中心静脉置管院内感染发生率分别为25%、28.1%、21.9%,均显著高于对照组(P<0.05)。结论:气管插管、气管切开、中心静脉置管容易发生院内感染,应
期刊
什么是分段函数呢?就是对于自变量X的不同的取值范围,有着不同的解析式的函数。分段函数的定义域是各段函数定义域的并集,值域也是各段函数值域的并集,要注意它是一个函数,而不是几个函数。  其实我们在日常生活中也会接触到分段函数,举两个最简单的例子,当我们寄快递时肯定需要确定两个问题,快递寄到哪里,快递多重。快递公司会根据快递的重量和距离来分段计算运费。当我们使用打车软件时,费用包括:起步价+里程费用+
期刊
跑步进场的90后  投资理财不知道什么时候成了王梓和朋友们聊天必备话题。  刚毕业不到两年的王梓一毕业就专心考公,终于考上了十八线老家的公务员,平时工作朝九晚五,离家近,吃住都能零成本解决,慢慢也有了一笔积蓄,但她明白,这笔钱实在不算什么,“朋友们的情况都差不多,大家工作后都有些积累,现在吃吃喝喝没什么压力,但一想到之后独立生活——房子车子孩子养老,靠工资哪够啊”。  刚开始,王梓还保守地将钱全部
期刊
选内存,低频大容量最为合适  在2月下旬最后一周内,内存市场迎来了全线上涨,最高涨幅竟然高达38%。实际上,在春节前,涨价苗头已经很明显了。根据DRAMeXchange的数据显示,截至2月3日,8Gb DDR4内存颗粒报价已经达到了3.93美元,而去年8月份的报价是2.54美元,去年12月底也才涨到3美元左右。这就意味着从去年8月以来,内存颗粒价格已经上涨了55%,上涨的幅度可以说是比较惊人了。对
期刊