赞
踩
设计工作1:升级的凯撒加密算法的仿真软件实现
1.凯撒升级版设计解密软件界面如图所示:
2.操作如下:单击“加载密文文件”按钮,加载cipher.txt。
然后点击“解密”按钮,看看明文是对是错
如果您觉得翻译后的明文不正确,则意味着字母映射表中的第二行设置不正确。请修改第二行字母映射表,然后单击再次使用“解密”按钮,直到解密的明文正确。
最后,当你确保第二行被猜测正确时,你将得到关键的句子。最后,解释一下关键的句子是什么,并对你的每个句子进行字面理论分析step(给出密钥句子,并且对你的每一步做理论上的分析).
“清除密文”按钮的功能是清除密文文本框。
3.凯撒密码升级版的原理如下:
其中的一个例子如下所示。
the plain text(明文): I am in danger!
The key sentence(密钥句子): zhangsan.
小写明文字母与大写明文字母之间的映射关系如表1所示,构造方法如下:明文字母的第一行为fi有26封字母
第二行密文字母顺序构造规则:首先删除关键字(张山)中的重复字母,然后写入密文字母的第二行等等,然后写入26个没有按照字母表顺序使用的字母中的剩余字母。
表1映射表(明文为小写,密文为大写)
Plaintext a b c d e f g h i j k l m n o p q r s t u v w x y z
Ciphertext Z H A N G S B C D E F I J K L M O P Q R T U V W X Y
|—关键词——|——其余26个字母按字母顺序写成,–|
(plaintext is uppercase, the ciphertext is lowercase)
Plaintext A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Ciphertext z h a n g s b c d e f i j k l m o p q r t u v w x y
|— Key sentence —|---The remaining letters of 26 lettersare written in alphabetical order --|
|—关键词——|——其余26个字母按字母顺序写成,–|
With the mapping table, then the text is I am in danger! The ciphertext is d ZJ DK NZKBGP!
.注:生成函数中的映射表是所有字母的对应映射表,包括大写字母的映射表和小写字母的映射表。
下面是代码:
import wx import webbrowser as web APP_TITLE = u'decryption software of Caesars upraded version(vip)' class mainFrame(wx.Frame): def __init__(self,parent): wx.Frame.__init__(self,parent,-1,APP_TITLE) self.SetSize((1020,750)) #Determine window size '''Create text prompt''' wx.StaticText(self, -1, u'Letter mapping table', pos=(0, 50), size=(150,-1), style=wx.ALIGN_RIGHT) wx.StaticText(self, -1, pos=(40, 80), size=(150, -1), style=wx.ALIGN_RIGHT) self.tip = wx.StaticText(self, -1, u'*Please modify the second line of letter mapping table', pos=(600, 80), size=(350, -1), style=wx.ST_NO_AUTORESIZE) wx.StaticText(self, -1, u'plaintext', pos=(0, 120), size=(150, -1), style=wx.ALIGN_RIGHT) wx.StaticText(self, -1, u'ciphertext', pos=(0, 350), size=(150, -1), style=wx.ALIGN_RIGHT) self.tip.SetForegroundColour('red') #Determine font color self.SetBackgroundColour('#A6FFA6') #Determine page background color # Create four text boxes self.tc1 = wx.TextCtrl(self, -1, '', pos=(180, 50), size=(400, -1), name='TC01', style=wx.ALIGN_LEFT) self.tc2 = wx.TextCtrl(self, -1, '', pos=(180, 80), size=(400, -1), name='TC02', style=wx.ALIGN_LEFT) self.tc3 = wx.TextCtrl(self, -1, '', pos=(180, 120), size=(800, 200), name='TC03', style=wx.TE_MULTILINE) self.tc4 = wx.TextCtrl(self, -1, '', pos=(180, 350), size=(800, 200), name='TC04', style=wx.TE_MULTILINE) '''Create keys''' btn_mea = wx.Button(self, -1, u'Decrypt', pos=(130, 610), size=(100, 30)) btn_meb = wx.Button(self, -1, u'Clear ciphertext', pos=(380, 610), size=(100, 30)) btn_mec = wx.Button(self, -1, u'load ciphertext file', pos=(530, 610), size=(200, 30)) btn_med = wx.Button(self, -1, u'Encryption', pos=(260, 610), size=(100, 30)) btn_mee = wx.Button(self, -1, u'close', pos=(760, 610), size=(100, 30)) '''Adjust button color''' btn_mea.SetBackgroundColour('red') btn_mec.SetBackgroundColour('#FFCC66') '''Input box events''' self.tc1.Bind(wx.EVT_TEXT, self.EvtText_1) self.tc2.Bind(wx.EVT_TEXT, self.EvtText_2) self.tc3.Bind(wx.EVT_TEXT, self.EvtText_3) self.tc4.Bind(wx.EVT_TEXT, self.EvtText_4) '''Key events''' btn_mec.Bind(wx.EVT_LEFT_DOWN, self.call) btn_mea.Bind(wx.EVT_LEFT_DOWN, self.Crack) btn_meb.Bind(wx.EVT_LEFT_DOWN, self.clear) btn_med.Bind(wx.EVT_LEFT_DOWN, self.Encrypation) self.Bind(wx.EVT_BUTTON, self.OnClose, btn_mee) '''system event''' self.Bind(wx.EVT_CLOSE, self.OnClose) self.game=5 #Number of free uses self.dome=5 #Number of free uses self.arr1="" self.arr2="" self.cin="" def EvtText_1(self, evt): '''Input box event function''' self.arr1="" obj = evt.GetEventObject() objName = obj.GetName() text = evt.GetString() if objName == 'TC01': self.arr1+=text def EvtText_2(self, evt): '''Input box event function''' self.arr2="" obj = evt.GetEventObject() objName = obj.GetName() text = evt.GetString() if objName == 'TC02': self.arr2+=text def EvtText_3(self, evt): '''Input box event function''' self.arr3="" obj = evt.GetEventObject() objName = obj.GetName() text = evt.GetString() if objName == 'TC03': self.arr3+=text def EvtText_4(self, evt): '''Input box event function''' self.arr4="" obj = evt.GetEventObject() objName = obj.GetName() text = evt.GetString() if objName == 'TC04': self.arr4+=text def call(self,evt): a=open("cipher.txt","r") self.cin=a.read() self.tc4.SetValue(str(self.cin)) def Crack(self,edd): #Ciphertext deciphering function if len(self.arr1)==0: tip_01 = wx.MessageDialog(None, u'Please input the plaintext of the password book',u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if (tip_01.ShowModal() == wx.ID_YES): return elif len(self.arr2)==0: tip_02 = wx.MessageDialog(None, u'Please input the ciphertext of the password book',u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if (tip_02.ShowModal() == wx.ID_YES): return elif len(self.arr1)!=len(self.arr2) : tip_03 = wx.MessageDialog(None, u'The password does not correspond one by one, please re-enter', u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if(tip_03.ShowModal() == wx.ID_YES): return elif len(self.cin)==0 or len(self.arr4)==0: tip_04 = wx.MessageDialog(None, u'Please enter the ciphertext', u'Operation tips',wx.YES_NO | wx.ICON_QUESTION) if (tip_04.ShowModal() == wx.ID_YES): return else: if 0<self.game<=5: tip_05 = wx.MessageDialog(None, u'Now there are {} free opportunities. Do you want to use them?'.format(self.game), u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if(tip_05.ShowModal() == wx.ID_YES): start=self.arr1+self.arr1.upper() #Cipherbook plaintext after=self.arr2+self.arr2.lower() #Cipherbook ciphertext table=str.maketrans(after,start) #Create mapping table self.cout=self.cin.translate(table) self.tc3.SetValue(str(self.cout)) self.game-=1 else: tip_06 = wx.MessageDialog(None, u'Now there are {} free opportunities.Do you want to recharge members?'.format(self.game), u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if(tip_06.ShowModal() == wx.ID_YES): self.Destroy() web.open_new("https://mall.csdn.net/vip?spm=1003.2020.3001.4496") def clear(self,evt): #Clear ciphertext box function self.tc4.SetValue("") def Encrypation(self,eud): #Generate ciphertext function if len(self.arr1) == 0: tip_07 = wx.MessageDialog(None, u'Please input the plaintext of the password book', u'Operation tips',wx.YES_NO | wx.ICON_QUESTION) if (tip_07.ShowModal() == wx.ID_YES): return elif len(self.arr2) == 0: tip_08 = wx.MessageDialog(None, u'Please input the ciphertext of the password book', u'Operation tips',wx.YES_NO | wx.ICON_QUESTION) if (tip_08.ShowModal() == wx.ID_YES): return elif len(self.arr1) != len(self.arr2) : tip_09 = wx.MessageDialog(None, u'The password does not correspond one by one, please re-enter',u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if (tip_09.ShowModal() == wx.ID_YES): return elif len(self.arr3) == 0: tip_10 = wx.MessageDialog(None, u'Please enter the plaintext', u'Operation tips',wx.YES_NO | wx.ICON_QUESTION) if (tip_10.ShowModal() == wx.ID_YES): return else: if 0<self.dome<=5: tip_11 = wx.MessageDialog(None, u'Now there are {} free opportunities. Do you want to use them?'.format(self.dome), u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if(tip_11.ShowModal() == wx.ID_YES): start=self.arr1+self.arr1.upper() #Cipherbook plaintext after=self.arr2+self.arr2.lower() #Cipherbook ciphertext table=str.maketrans(start,after) #Create mapping table self.gout=self.arr3.translate(table) self.tc4.SetValue(str(self.gout)) self.dome-=1 else: tip_12 = wx.MessageDialog(None, u'Now there are {} free opportunities.Do you want to recharge members?'.format(self.dome), u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if(tip_12.ShowModal() == wx.ID_YES): self.Destroy() web.open_new("https://mall.csdn.net/vip?spm=1003.2020.3001.4496") def OnClose(self, evt): '''Close window event function''' tip_13 = wx.MessageDialog(None, u'Are you sure you want to close this window?', u'Operation tips', wx.YES_NO | wx.ICON_QUESTION) if(tip_13.ShowModal() == wx.ID_YES): self.Destroy() class mainApp(wx.App): def OnInit(self): self.SetAppName(APP_TITLE) self.Frame = mainFrame(None) self.Frame.Show() return True def main(): app = mainApp() app.MainLoop() if __name__ == "__main__": main()
代码效果如下:
文本文件内容如下:
eKUB tGB 1ST ARY uSHMF GBQ EKRMJBT RMA DNVBQHMF GBQSBKC THFGTKY ,SGB AHAM'T FBT UO .iBQ ANQL LRTBS WBQB RCQRHA TN FN HM RMA DNLCNQT GBQ .sGB AHAM'T BRT RMYTGHMF TGB WGNKB ARY ,AHAM'T WRSG GBQ CRDB NQ EQUSG GBQ TBBTG .dT MHFGT ,j DNUKA GBRQ GBQ DQYHMF EBMBRTG TGB EKRMJBQ. tGB 2MA ARY sGB RTB TNARY, CNQDBA ANWM EY GBQ QNNLLRTBS .iBQ BYBS WBQB QBA j RKWRYS DRKKBA GBQ "fQY EREY" .sGB RKWRYS SPUHQLBA GBQ LNUTG RMA QBTNQTBA :"oN ,j'L MNT." tGB 3QA ARY tNARY, SGB AQBSSBA VBQY SBXY ,WRKJBA HMTN R ERQ RMA AQRMJ R KNT NC RKDNGNK .uSHMF TBLOTHMF LNVBS, SGB SUQVBYBA TGB QNNL .nRMY LBM DRLB UO TN GBQ RMA CKHQTBA WHTG GBQ TBKKHMF GNW EBRUTHCUK SGB WRS .sGB AQRMJ R KNT LNQB .wGBM R LUDG NKABQ LRM .NKA BMNUFG TN GBQ CRTGBQ ,WRKJBA UO RMA SRHA :"nHSS ,KBT LB TRJB YNU GNLB ,"SGB SOKRSGBA GBQ AQHMJ NMTN GHS CRDB .dS TGB NKABQ LRM FNT QBRAY TN SKRO GBQ .nU SGNWBA UO RMA SRVBA eKUB .j JMNW RKK TGHS EBDRUSB j WRS WRTDGHMF CQNL R DNQMBQ HM TGB ERQ. tGB 4TG ARY tNARY, SGB FNT UO QBRKKY BRQKY .dCTBQ EUSYHMF RQNUMA RKK LNQMHMF ,SGB KNDJBA GBQSBKC HMSHAB TGB ERTGQNNL .wGBM GBQ QNNLLRTBS NOBMBA TGB ANNQ ,TGBY WBQB RLRZBA :"sN DKBRM." tGB 5TG ARY sGB EBFRM STUAYHMF. sGB GRA ANMB VBQY WBKK HM SDGNNK EBCNQB. iNWBVBQ, WGBM WB FNT TNFBTGBQ, GBQ FQRABS ABTBQHNQRTBA. jT HS FNNA TN CNDUS NM SNLBTGHMF BKSB RS HT WHKK HLOQNVB QBDNVBQY. tGQBB LNMTGS KRTBQ sGB EBDRLB OQBSHABMT NC TGB sTUABMT uMHNM. sGB HS EBDNLHMF LNQB RMA LNQB REKB. sGB RKSN EBDNLBS LNQB NOBM. sNNM, SGB WHKK MBBA TN OQBORQB CNQ FQRAURTB SDGNNK. pMB YBRQ KRTBQ tGBQB RQB LRMY LBM EBSHAB, LRMY WGN RQB EBTTBQ TGRM LB. sGB MBVBQ TRJBS MNTHDB NC TGBL, EUT SGB FBTS RKNMF WHTG mHMF VBQY WBKK. tGBQB RQB QULNQS RENUT TGBL HM SDGNNK. sGB TQBRTS GHL KHJB RM BKABQ EQNTGBQ, EUT QULNQ DRMMNT EB EKNDJBA. tGQBB YBRQS KRTBQ sGB HS FBTTHMF LRQQHBA. tGB FQNNL HS mHMF, SGB HS WQHTHMF WBAAHMF HMVHTRTHNMS. wGHKB SGB HS WQHTHMF, SGB EBMT NVBQ TGB ABSJ RMA TBRQS CBKK ANWM UMDNMTQNKKREKB. j STBOOBA CNQWRQA RMA SRW SGRT NM RKK TGB HMVHTRTHNMS, TGB FQNNL’S MRLB WRS LHMB. j WRMT TN DQY TNN, EUT FGNST DRMMNT DQY. j AN MNT GRVB RMY TBRQS. tGQBB YBRQS RFN, WGBM j WRS DRQQYHMF GBQ EHQTGARY DRJB DQNSSHMF R STQBBT, R DRQ DQRSGBA HMTN LB.
以上就是文章全部内容!!!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。