关于此内容学习所写的代码已上传到githubhttp://github.com/JasonCian/Simple-Script-for-CTF-Cryptography-Beginners
凯撒加密
历史
-
在古罗马苏维托尼乌斯所著的《罗马十二帝王传》中记载了凯撒曾经使用一种密码来和自己的军队传递重要情报,我们将这种密码称为凯撒密码。
-
尤利乌斯·凯撒
-
现在已经无法弄清凯撒密码在当时有多大的效果,但是有理由相信它是安全的。因为凯撒大部分敌人都是目不识丁的,而其余的则可能将这些消息当作是某个未知的外语。即使有某个敌人获取了凯撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。
-
现在,凯撒密码只会作为其他更复杂加密方式的一个步骤被广泛应用,因为它非常容易被破解。从当前技术来看,实际应用中使用凯撒密码几乎无法保证通信的安全。
实例
-
凯撒密码的替换方法是通过排列字母顺序按一个固定的偏移量进行偏移,在这个基础上使整段明文最终呈现为不可直接阅读理解的密文。
-
以26个字母的英文字母表为基础,可以得到从1-25共25种不同偏移量的加密
-
基于26个英文字母表的凯撒加密,解密以及爆破
# Caesar Cipher MAX_KEY_SIZE = 26 def getMode(): while True: print('请选择加密或解密模式,或者选择暴力破解:') print('加密:encrypt(e)') print('解密:decrypt(d)') print('暴力破解:brute(b)') mode = input().lower() if mode in 'encrypt e decrypt d brute b'.split(): return mode else: print('请输入"encrypt"或"e"或"decrypt"或"d"或"brute"或"b"!') def getMessage(): print('请输入你的信息:') return input() def getKey(): key = 0 while True: print('请输入密钥数字(1-%s)' % (MAX_KEY_SIZE)) key = int(input()) if (key >=1 and key <= MAX_KEY_SIZE): return key def getTranslatedMessage(mode, message, key): if mode[0] == 'd': key = -key translated = '' for i in range(len(message)): symbol = message[i] if symbol.isalpha(): num = ord(symbol)+ key if symbol.isupper(): if num > ord('Z'): num -= 26 elif num < ord('A'): num += 26 elif symbol.islower(): if num > ord('z'): num -= 26 elif num < ord('a'): num += 26 translated += chr(num) else: translated += symbol return tran