日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

乱序字典加密解密python基础知识综合应用

發(fā)布時間:2023/12/31 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 乱序字典加密解密python基础知识综合应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目標

  • 找一段比較長的文本(文本是以.txt文件形式存在的)
    NOTE:頻率法適用于較大樣本

  • 打開文件,讀取字符形成字符串( python文件函數(shù)
    處理成只包含小寫字母的字符串 (用re的函數(shù)

  • 統(tǒng)計這段字符串中的字母頻率

  • 將這個頻率和自己查找到的頻率表對照,看看差異。

  • 亂序法加密這個字符串,用標準頻率表中的對應(yīng)次序來解密。
    一般都會得到若干個正確單詞,但完全碰對的可能性不大。

  • 輸出解密文件

  • 找一段比較長的文本

    從global times環(huán)球時報上摘取了一個報道

    文件處理

    由于是字符操作,字符串屬于不可變對象,因此返回新的對象

    dat = open('EnglishSample.txt','r') sample = dat.read() dat.close() sample = sample.lower()#lower 方法返回的是一個新的字符串 sample = re.sub('[\W\d]+','',sample) #將第一個模式替換為第二種字符串,作用在第三個變量 #同樣返回一個新的字符串

    清洗后不含有空格并且沒有大寫字母

    字母頻率統(tǒng)計&頻率表

    def frequencyDict(sample):rDict = {}strlen = len(sample)for i in sample:if i in rDict:rDict[i] += 100.0/strlen#百分制詞頻else:rDict[i] = 1.0/strlenreturn rDict

    另一種統(tǒng)計方法(直接使用字符串內(nèi)置方法count)

    for i in alpha:v3.append(100.0*secret.count(i)/len(secret))#統(tǒng)計加密后詞頻

    在某個網(wǎng)站找了頻率表
    然后手動錄入

    stdDict = {'e':12.02,'t':9.10,'a':8.12,'o':7.68,'i':7.31,'n':6.95,'s':6.28,'r':6.02,'h':5.92,'d':4.32,'l':3.98,'u':2.88,'c':2.71,'m':2.61,'f':2.30,'y':2.11,'w':2.09,'g':2.03,'p':1.82,'b':1.49,'v':1.11,'k':0.69,'x':0.17,'q':0.11,'j':0.10,'z':0.07}

    圖表展示

    一個尷尬的展示方法

    如果按照值排列,就會看不明白字符順序

    改良之后

    采用字母表正常順序,觀察詞頻的差異
    雖然圖片依舊比較丑,但是可以觀察到詞頻區(qū)別
    紅色為網(wǎng)上查到的詞頻

    plt.rcParams['font.sans-serif']=['SimHei'] plt.title('詞頻表紅線是網(wǎng)絡(luò)版') plt.plot(k1,v1,'r') plt.bar(k1,v2) plt.show()

    加密

    根據(jù)字典加密(同理可以解密)

    def transfer(instr, code):temp = []for i in range(len(instr)):temp.append(code[instr[i]])outstr = ''.join(temp)return outstr

    另外為了便于排序字典(我也不知道為什么當初要研究這個)
    我研究了一下sort方法和lambda表達式
    將字典轉(zhuǎn)換為鍵值對列表
    sort方法
    匿名函數(shù)
    可以選擇按照鍵排序或者按照值排序,返回排好的鍵&值兩個列表

    def sortDict(rDict,k,v,key=0):raw = list(rDict.items())raw.sort(key = lambda d:d[key])for i in raw:k.append(i[0])v.append(i[1])

    解密結(jié)果

    Bent over a barrel, Greek microbrewer Sophocles Panagiotou lovingly draws a measure of his Septem Red Ale into a glass cylinder and expertly transfers it to a glass.
    ……
    gernokeatgtaaeuyaeevcilaogaebeasowholueswtrtyionomuokiryupdatbs
    ……
    慘不忍睹

    總結(jié)

  • 寫代碼之前一定先策劃好變量與函數(shù)(即使python很重要的是使用庫函數(shù))
  • 代碼重用非常重要,不要出現(xiàn)復(fù)制粘貼的想法(兩個函數(shù)有共同功能要再分拆)
  • 變量名要不僅有代表性,而且要先策劃,否則一堆encodeXX的變量名還是看不明白
  • 破窗效應(yīng),如果有一段很爛的代碼,會導(dǎo)致心態(tài)爆炸胡寫下去,所以開始不要寫的亂
  • python編程中遇到的問題往往是有可以滿足需求的函數(shù),但是數(shù)據(jù)類型不是很方便,所以寫起來總是有削足適履的感覺
  • 總結(jié)

    以上是生活随笔為你收集整理的乱序字典加密解密python基础知识综合应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。