根据百度百科上的解释,凯撒密码是一种古老的加密算法。算法
密码的使用最先能够追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,经过将字母按顺序推后起3位起到加密做用,如将字母A换做字母D,将字母B换做字母E。因听说恺撒是率先使用加密函的古代将领之一,所以这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就能够破译。 现今又叫“移位密码”,只不过移动的为数不必定是3位而已。数组
密码术能够大体别分为两种,即易位和替换,固然也有二者结合的更复杂的方法。在易位中字母不变,位置改变;替换中字母改变,位置不变。安全
将替换密码用于军事用途的第一个文件记载是恺撒著的《高卢记》。恺撒描述了他如何将密信送到正处在被围困、濒临投降的西塞罗。其中罗马字母被替换成希腊字母使得敌人根本没法看懂信息。函数
苏托尼厄斯在公元二世纪写的《恺撒传》中对恺撒用过的其中一种替换密码做了详细的描写。恺撒只是简单地把信息中的每个字母用字母表中的该字母后的第三个字母代替。这种密码替换一般叫作恺撒移位密码,或简单的说,恺撒密码。加密
在密码学中,凯撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。恺撒密码一般被做为其余更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。可是和全部的利用字母表进行替换的加密技术同样,恺撒密码很是容易被破解,并且在实际应用中也没法保证通讯安全。spa
说了这么多,相信你们可能也有点晕了,下面这张图加密方法就是错三个位来实现加密功能设计
(1) 设计思想:code
(2) 程序流程图:blog
咱们定义个key=13,此时咱们对字符串This is my secret message进行加密ip
import pyperclip message = 'This is my secret message'#保存加密或解密的字符串 key = 13#保存加密密钥的整数 mode = 'encrypt' LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' translated = '' message = message.upper() for symbol in message: if symbol in LETTERS: num = LETTERS.find(symbol) if mode == 'encrypt': num = num + key elif mode == 'decrypt': num = num - key if num >= len(LETTERS): num = num - len(LETTERS) elif num < 0: num = num + len(LETTERS) translated = translated + LETTERS[num] else: translated = translated + symbol print(translated) pyperclip.copy(translated)
打印结果以下:
GUVF VF ZL FRPERG ZRFFNTR [Finished in 0.8s]
咱们来对上面这部分代码进行分析
咱们能够看到,第一行调用了一个pyperclip的模块,咱们须要下载这个模块,很简单,安装一个pip,直接输入pip install pyperclip便可完成安装
message = 'This is my secret message'#保存加密或解密的字符串 key = 13#保存加密密钥的整数
message指定了用来保存加解密的字符串
而key用来保存加密密钥
message = message.upper()
调用了一个upper函数,将加解密字符串所有变成大写字母
后面的实现过程很简单,判断mode值是否为encrpy,而后对字符进行移位
咱们将加密后的字符串进行破解,实现原理以下:
import pyperclip message = 'GUVF VF ZL FRPERG ZRFFNTR' LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' for key in range(len(LETTERS)): translated = '' for symbol in message: if symbol in LETTERS: num = LETTERS.find(symbol) num = num - key if num < 0: num = num + len(LETTERS) translated = translated + LETTERS[num] else: translated = translated + symbol print('Key #%s:%s'%(key,translated))
打印结果以下:
Key #0:GUVF VF ZL FRPERG ZRFFNTR Key #1:FTUE UE YK EQODQF YQEEMSQ Key #2:ESTD TD XJ DPNCPE XPDDLRP Key #3:DRSC SC WI COMBOD WOCCKQO Key #4:CQRB RB VH BNLANC VNBBJPN Key #5:BPQA QA UG AMKZMB UMAAIOM Key #6:AOPZ PZ TF ZLJYLA TLZZHNL Key #7:ZNOY OY SE YKIXKZ SKYYGMK Key #8:YMNX NX RD XJHWJY RJXXFLJ Key #9:XLMW MW QC WIGVIX QIWWEKI Key #10:WKLV LV PB VHFUHW PHVVDJH Key #11:VJKU KU OA UGETGV OGUUCIG Key #12:UIJT JT NZ TFDSFU NFTTBHF Key #13:THIS IS MY SECRET MESSAGE Key #14:SGHR HR LX RDBQDS LDRRZFD Key #15:RFGQ GQ KW QCAPCR KCQQYEC Key #16:QEFP FP JV PBZOBQ JBPPXDB Key #17:PDEO EO IU OAYNAP IAOOWCA Key #18:OCDN DN HT NZXMZO HZNNVBZ Key #19:NBCM CM GS MYWLYN GYMMUAY Key #20:MABL BL FR LXVKXM FXLLTZX Key #21:LZAK AK EQ KWUJWL EWKKSYW Key #22:KYZJ ZJ DP JVTIVK DVJJRXV Key #23:JXYI YI CO IUSHUJ CUIIQWU Key #24:IWXH XH BN HTRGTI BTHHPVT Key #25:HVWG WG AM GSQFSH ASGGOUS [Finished in 0.2s]
咱们能够看出,Key#13即为咱们所求的答案