第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 python 中加密然后解密相同的字符串

在 python 中加密然后解密相同的字符串

ibeautiful 2022-08-02 16:53:11
問題是:在密碼學(xué)中,簡單的替換密碼是一種加密方法,其中短語的每個字母都被不同的字母或字母序列替換。然后,可以通過執(zhí)行替換的反函數(shù)來解密該短語。在這個問題中,我們將實現(xiàn)一個簡單的替換密碼,其中字符(字母,數(shù)字或特殊符號)被00和99(包括)之間的兩位數(shù)字替換。例如,可以將字母“a”加密為數(shù)字“06”,或者特殊符號“!”可以設(shè)置為數(shù)字“57”。我們將使用字典來存儲每個字符與其相應(yīng)的加密形式之間的映射。也就是說,字典的密鑰將是常規(guī)字符(字母,數(shù)字和特殊符號),值將是字符的加密形式(和 之間的兩位數(shù)數(shù)字)。0099您的代碼應(yīng)針對此問題實現(xiàn)以下五個函數(shù)。名稱:創(chuàng)建密碼字典參數(shù):無參數(shù)。返回值:一種字典,其中每個鍵都是一個常規(guī)字符,每個值都是介于 00 和 99 之間的隨機兩位數(shù)(包括 00 和 99)。它應(yīng)該做什么:在提供給您的代碼的頂部,定義了字符串。此字符串包含應(yīng)成為字典中鍵的所有字母、數(shù)字和特殊符號。您必須遍歷此字符串,并在每個字符之間和為每個字符生成一個兩位數(shù)的隨機數(shù)。兩位數(shù)將是字典中的值;每個字符(鍵)將有一個兩位數(shù)(值)。LETTERS0099請注意,數(shù)字 0, 1, 2, ..., 9 不應(yīng)該是值;相反,它們應(yīng)該是數(shù)字00,01,02,...,09。此外,請注意,每個字符都應(yīng)具有唯一的隨機數(shù)。也就是說,如果字符“a”映射到值“57”,則其他任何字符都不應(yīng)映射到值“57”。(您需要使用某種循環(huán)來繼續(xù)生成新的隨機數(shù),直到找到唯一的隨機數(shù)。名稱:加密參數(shù):字符串 。s返回值:字符串 s 的加密版本。原始字符串 s 的每個字符都應(yīng)替換為密碼字典中相應(yīng)的兩位數(shù)字。名稱: 解密參數(shù):字符串 。返回值:字符串 s 的解密版本。加密字符串 s 的每個兩位數(shù)應(yīng)替換為密碼字典中的相應(yīng)字符。請注意,在這里,我們有加密的形式(字典中的值),并且正在尋找常規(guī)字符(字典中的密鑰7)。為此,我們需要使用類中看到的反向查找函數(shù)。此功能已在隨附的 encryption.py 文件中提供給您。s我們將編寫另外兩個函數(shù)來增加加密的強度。一個函數(shù)將多次重復(fù)加密字符串。另一個函數(shù)將嘗試解密字符串,而不知道它被加密的次數(shù)(從而破壞了更強的加密點)。名稱:多次加密參數(shù):一個字符串和整數(shù)值,表示加密字符串的次數(shù)。sn返回值:字符串加密時間。也就是說,字符串將首次加密,每個字符轉(zhuǎn)換為其兩位數(shù)表示形式。然后,加密的字符串將被重新加密,每個數(shù)字都變成其兩位數(shù)的表示形式。(因此,每次加密后,字符串的長度將加倍。(提示:您必須多次調(diào)用加密函數(shù)。sn名稱:多次解密參數(shù):字符串 。s返回值:字符串 的解密版本 。由于我們不知道解密字符串的次數(shù),因此我們將繼續(xù)對字符串調(diào)用decrypt,直到字符串包含英語中的常用單詞。encryption.py 文件中為您提供了常用詞(常用詞)的列表。如果在解密一次后,字符串包含此列表中的任何單詞,則應(yīng)立即返回解密的字符串。否則,請繼續(xù)對字符串調(diào)用 decrypt,直到它包含其中一個常用詞。(我們假設(shè)完全解密的字符串將始終包含至少一個常用詞。s最后,在文件 encryption.py 結(jié)束時,您會注意到已經(jīng)為您編寫的一些代碼。此代碼要求用戶輸入一個字符串,然后調(diào)用各種函數(shù)并打印它們返回的內(nèi)容(以生成下面看到的示例)。您必須更改此代碼,以便如果用戶輸入的字符串不包含“常用詞”列表中的任何單詞,則程序應(yīng)輸出“無效輸入”,而不是執(zhí)行其余代碼。否則,程序應(yīng)繼續(xù)執(zhí)行其余代碼。(提示:回想一下作業(yè) 1 和 if/else 分支。
查看完整描述

2 回答

?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

你可以試試這個:


LETTERS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()`~-=_+[]{}|;\':",./<>? '


def create_cypher_dictionary():

    numbers = [ '%02d' % i for i in range(100) ]

    random.shuffle( numbers )

    return { a : b for a,b in zip( LETTERS, numbers ) }


def encrypt( cypher, string ) :

    return ''.join( cypher[ch] for ch in string )


def decrypt( cypher, string ) :

    inverse_cypher = { b : a for a,b in cypher.items() }

    return ''.join( inverse_cypher[a+b] for a,b in zip(*[iter(string)]*2) )

檢查:


>>> cypher = create_cypher_dictionary()

>>> encoded = encrypt( cypher, 'The quick brown fox jumps over the lazy dog' )

>>> encoded

'93684236886025540636378012826636001276363960074903361250428036306842367064856536261211'

>>> decrypt( cypher, encoded )

'The quick brown fox jumps over the lazy dog'

>>> 

是的,你不能每次都創(chuàng)建密碼,你必須做一個,然后重用它,否則你的結(jié)果會有點隨機=)


查看完整回答
反對 回復(fù) 2022-08-02
?
達令說

TA貢獻1821條經(jīng)驗 獲得超6個贊

您一次只采用一位數(shù)字來錯誤地轉(zhuǎn)換 ASCII,而此時您應(yīng)采用兩位數(shù)字。只需在解密函數(shù)中更改 for 循環(huán)的步驟:


def decrypt(s):

    cypher=create_cypher_dictionary()


    new_s=''

    for i in range(0,len(s)-1,2): # Make the for loop step 2 instead of 1 (default)

        c=s[i]+s[i+1]

        for cc in cypher:

            if cypher[cc]==c:

                new_s=new_s+cc


    return new_s


查看完整回答
反對 回復(fù) 2022-08-02
  • 2 回答
  • 0 關(guān)注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號