乱序字典加密解密python基础知识综合应用
目標(biāo)
找一段比較長的文本(文本是以.txt文件形式存在的)
NOTE:頻率法適用于較大樣本
打開文件,讀取字符形成字符串( python文件函數(shù))
處理成只包含小寫字母的字符串 (用re的函數(shù))
統(tǒng)計這段字符串中的字母頻率
將這個頻率和自己查找到的頻率表對照,看看差異。
亂序法加密這個字符串,用標(biāo)準(zhǔn)頻率表中的對應(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)站找了頻率表
然后手動錄入
圖表展示
一個尷尬的展示方法
如果按照值排列,就會看不明白字符順序
改良之后
采用字母表正常順序,觀察詞頻的差異
雖然圖片依舊比較丑,但是可以觀察到詞頻區(qū)別
紅色為網(wǎng)上查到的詞頻
加密
根據(jù)字典加密(同理可以解密)
def transfer(instr, code):temp = []for i in range(len(instr)):temp.append(code[instr[i]])outstr = ''.join(temp)return outstr另外為了便于排序字典(我也不知道為什么當(dāng)初要研究這個)
我研究了一下sort方法和lambda表達(dá)式
將字典轉(zhuǎn)換為鍵值對列表
sort方法
匿名函數(shù)
可以選擇按照鍵排序或者按照值排序,返回排好的鍵&值兩個列表
解密結(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é)
總結(jié)
以上是生活随笔為你收集整理的乱序字典加密解密python基础知识综合应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 富易发学生用计算机怎么关机,电脑远程关机
- 下一篇: sql 截取