700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python实现凯撒密码的加密与解密

Python实现凯撒密码的加密与解密

时间:2019-04-28 14:25:36

相关推荐

Python实现凯撒密码的加密与解密

在密码学中,我们把想要加密的消息叫做明文(plain text)。把明文转换成加密后的消息叫做对明文加密(encrypting),明文加密后变成(cipher text)。

凯撒密码的密钥是1到26之间的一个数字。除非知道这个键(即用于加密消息的数字),否则无法对这个保密的代码进行解密。凯撒密码是人类最早发明的密码之一,原理是获取消息中的每个字母,并用一个“移位后的”字母来代替它,如果把字母A移动1格,就会得到字母B,移动两格,就会得到字母C。

程序一共有3种模式,分别是加密模式、解密模式和暴力破解。暴力破解(brute force)是对每一种可能的秘钥进行尝试,直到找到正确的密钥的一种技术。因为只有26种可能的密钥,用每种可能的密钥进行破解,这是一件很容易的事。

# Caesar CipherMAX_KEY_SIZE = 26def 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 modeelse:print('请输入"encrypt"或"e"或"decrypt"或"d"或"brute"或"b"!')def getMessage():print('请输入你的信息:')return input()def getKey():key = 0while True:print('请输入密钥数字(1-%s)' % (MAX_KEY_SIZE))key = int(input())if (key >=1 and key <= MAX_KEY_SIZE):return keydef getTranslatedMessage(mode, message, key):if mode[0] == 'd':key = -keytranslated = ''for symbol in message:if symbol.isalpha():num = ord(symbol)num += keyif symbol.isupper():if num > ord('Z'):num -= 26elif num < ord('A'):num += 26elif symbol.islower():if num > ord('z'):num -= 26elif num < ord('a'):num += 26translated += chr(num)else:translated += symbolreturn translatedmode = 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条信息就是我们暴力破解得到的原密码!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。