凯撒密码升级版软件制作——Python设计

设计工作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.

以上就是文章全部内容!!!!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿诺斯

您的打赏是我创作路上最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值