Python实现凯撒密码的加密与解密
2017-10-17 00:30
344 查看
在密码学中,我们把想要加密的消息叫做明文(plain text)。把明文转换成加密后的消息叫做对明文加密(encrypting),明文加密后变成(cipher text)。
凯撒密码的密钥是1到26之间的一个数字。除非知道这个键(即用于加密消息的数字),否则无法对这个保密的代码进行解密。凯撒密码是人类最早发明的密码之一,原理是获取消息中的每个字母,并用一个“移位后的”字母来代替它,如果把字母A移动1格,就会得到字母B,移动两格,就会得到字母C。
程序一共有3种模式,分别是加密模式、解密模式和暴力破解。暴力破解(brute force)是对每一种可能的秘钥进行尝试,直到找到正确的密钥的一种技术。因为只有26种可能的密钥,用每种可能的密钥进行破解,这是一件很容易的事。
加密运行示例:
解密运行示例:
暴力破解示例:
第8条信息就是我们暴力破解得到的原密码!
凯撒密码的密钥是1到26之间的一个数字。除非知道这个键(即用于加密消息的数字),否则无法对这个保密的代码进行解密。凯撒密码是人类最早发明的密码之一,原理是获取消息中的每个字母,并用一个“移位后的”字母来代替它,如果把字母A移动1格,就会得到字母B,移动两格,就会得到字母C。
程序一共有3种模式,分别是加密模式、解密模式和暴力破解。暴力破解(brute force)是对每一种可能的秘钥进行尝试,直到找到正确的密钥的一种技术。因为只有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 symbol in message: if symbol.isalpha(): num = ord(symbol) num += 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 translated mode = getMode() message = getMessage() if mode[0] != 'b': key = getKey() print('你要翻译的信息是:') if mode[0] != 'b': print(getTranslatedMessage(mode, message, key)) else: for key in range(1, MAX_KEY_SIZE + 1): print(key, getTranslatedMessage('decrypt', message, key))
加密运行示例:
请选择加密或解密模式: 加密:encrypt(e) 解密:decrypt(d) encrypt 请输入你的信息: The sky above the port was the color of television, tuned to a dead channel. 请输入密钥数字(1-26) 13 你要翻译的信息是: Gur fxl nobir gur cbeg jnf gur pbybe bs gryrivfvba, gharq gb n qrnq punaary.
解密运行示例:
请选择加密或解密模式: 加密:encrypt(e) 解密:decrypt(d) decrypt 请输入你的信息: Gur fxl nobir gur cbeg jnf gur pbybe bs gryrivfvba, gharq gb n qrnq punaary. 请输入密钥数字(1-26) 13 你要翻译的信息是: The sky above the port was the color of television, tuned to a dead channel.
暴力破解示例:
请选择加密或解密模式,或者选择暴力破解: 加密:encrypt(e) 解密:decrypt(d) 暴力破解:brute(b) brute 请输入你的信息: Lwcjba uig vwb jm xtmiaivb, jcb kmzbiqvbg qa ijaczl. 你要翻译的信息是: 1 Kvbiaz thf uva il wslhzhua, iba jlyahpuaf pz hizbyk. 2 Juahzy sge tuz hk vrkgygtz, haz ikxzgotze oy ghyaxj. 3 Itzgyx rfd sty gj uqjfxfsy, gzy hjwyfnsyd nx fgxzwi. 4 Hsyfxw qec rsx fi tpiewerx, fyx givxemrxc mw efwyvh. 5 Grxewv pdb qrw eh sohdvdqw, exw fhuwdlqwb lv devxug. 6 Fqwdvu oca pqv dg rngcucpv, dwv egtvckpva ku cduwtf. 7 Epvcut nbz opu cf qmfbtbou, cvu dfsubjouz jt bctvse. 8 Doubts may not be pleasant, but certainty is absurd. 9 Cntasr lzx mns ad okdzrzms, ats bdqszhmsx hr zartqc. 10 Bmszrq kyw lmr zc njcyqylr, zsr acpryglrw gq yzqspb. 11 Alryqp jxv klq yb mibxpxkq, yrq zboqxfkqv fp xyproa. 12 Zkqxpo iwu jkp xa lhawowjp, xqp yanpwejpu eo wxoqnz. 13 Yjpwon hvt ijo wz kgzvnvio, wpo xzmovdiot dn vwnpmy. 14 Xiovnm gus hin vy jfyumuhn, von wylnuchns cm uvmolx. 15 Whnuml ftr ghm ux iextltgm, unm vxkmtbgmr bl tulnkw. 16 Vgmtlk esq fgl tw hdwsksfl, tml uwjlsaflq ak stkmjv. 17 Uflskj drp efk sv gcvrjrek, slk tvikrzekp zj rsjliu. 18 Tekrji cqo dej ru fbuqiqdj, rkj suhjqydjo yi qrikht. 19 Sdjqih bpn cdi qt eatphpci, qji rtgipxcin xh pqhjgs. 20 Rciphg aom bch ps dzsogobh, pih qsfhowbhm wg opgifr. 21 Qbhogf znl abg or cyrnfnag, ohg pregnvagl vf nofheq. 22 Pagnfe ymk zaf nq bxqmemzf, ngf oqdfmuzfk ue mnegdp. 23 Ozfmed xlj yze mp awpldlye, mfe npceltyej td lmdfco. 24 Nyeldc wki xyd lo zvokckxd, led mobdksxdi sc klcebn. 25 Mxdkcb vjh wxc kn yunjbjwc, kdc lnacjrwch rb jkbdam. 26 Lwcjba uig vwb jm xtmiaivb, jcb kmzbiqvbg qa ijaczl.
第8条信息就是我们暴力破解得到的原密码!
相关文章推荐
- 凯撒密码加密解密--JAVA实现(基础)
- python实现无证书加密解密实例
- 使用python实现简单的加密解密机制
- 凯撒密码加密解密--JAVA实现(基础)
- Python 实现base64加密和解密
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现
- python实现RSA加密(解密)算法
- python AES-16位加密解密功能实现
- python 乍见(实现AES 加密解密)
- windows中使用Python进行AES加密解密-加密解密功能实现
- Python实现对字符串的加密解密方法示例
- python实现base64加密/解密界面化小工具
- 使用Python实现AES加密解密
- Java IO4 实现凯撒密码加密解密文本文件
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现
- python有证书的加密解密实现方法
- JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致
- python3.6 实现AES加密、解密(改版)
- python实现aes加密解密,RSA签名和验签,RSA加密解密,并调用接口
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]