暴力不能解決一切問題
題解
題目明顯提示暴力方法,盲猜是一個簡單換位密碼,不同於凱撒密碼,每個字母對應的密文是完全混亂的:
abcdefghijklmnopqrstuvwxyz
qwertyuiopasdfghjklzxcvbnm
該演算法是根據每個字母出現的頻率來破解
使用爬坡演算法每次交換兩個字母,計算得分情況,得分越高,正確結果可能性越高
通過四字組確定與文字相似情況
程式碼
import random
import sys
from ngram_score import ngram_score
#引數初始化
text ='XEYREFKMMYZEFWMYHAKTYIXWXKJAPYRINEBIVYUHKXJNPAEUYGZKHYZRNPZATENPZAJANKMJKFLYUMXAAV'
template = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
key = {'A':'A'}
fitness = ngram_score('english_quadgrams.txt')
score = -99e9
maxn = -99e9
j = 0
while 1:
j +=1
n=len(template)
for i in range(n):
key[template[i]] = chr(ord('A')+i)
dic = text
for i in range(len(dic)):
dic = dic[:i]+key[dic[i]]+dic[i+1:]
score = fitness.score(dic)
count = 0
while count < 1000:
a = random.randint(0,25)
b = random.randint(0,25)
template[a],template[b]= template[b],template[a]
key[template[a]],key[template[b]] = key[template[b]],key[template[a]]
dic = text
for i in range(len(dic)):
dic = dic[:i]+key[dic[i]]+dic[i+1:]
sco = fitness.score(dic)
#此子金鑰代替其對應的父金鑰,提高明文適應度
if sco > score:
score = sco
count = 0
else:
template[a],template[b]=template[b],template[a]
key[template[a]],key[template[b]]=key[template[b]],key[template[a]]
count = count+1
if score > maxn:
maxn = score
print ('Currrent key: '+''.join(template))
print ('Iteration total:', j)
print ('Plaintext: ', dic,maxn)
sys.stdout.flush()
相關文章
- RAG能解決大模型的什麼問題?不能解決什麼問題?大模型
- 這個新 Go 錯誤處理提案,能解決問題不?Go
- CRM能解決哪些企業管理問題?
- 分析CRM能解決哪些企業管理問題?
- 能解決哪些企業管理問題的CRM?
- 跨境電商ERP能解決的那些問題
- 企業實施PDM能解決這些問題
- 電子表格軟體能解決什麼問題?
- 進銷存管理系統能解決哪些問題?
- SLL證書的好處!能解決什麼問題!
- 點晴ERP系統究竟能解決哪些問題?
- leetcode.回溯演算法能解決什麼問題?LeetCode演算法
- URL請求不能解決中文請求的問題
- TOC系統能解決工廠中的哪些問題?
- 六西格瑪諮詢公司能解決什麼問題?
- a-textarea(textarea)出現模糊問題的可能解決方案
- DevOps|研發效能解決的是企業效率問題dev
- 什麼是智慧礦山?它能解決什麼問題?
- 基本操作能解決的問題,不必勞煩機器學習機器學習
- 透徹分析和解決一切javaWeb專案亂碼問題JavaWeb
- 區塊鏈技術能解決貧富差距兩極分化問題嗎?區塊鏈
- 人工智慧企業實施精益生產能解決哪些問題?人工智慧
- CRM系統中的營銷自動化能解決什麼問題
- 我們在講的 Database Plus,到底能解決什麼樣的問題?Database
- 有使用過css的images-set嗎?它能解決什麼問題?CSS
- 錢能解決一切? 開發者:懂得經營才是基本技能屬性
- BPMN2.0是什麼?它能解決企業流程管理中哪些問題?
- WPF 解決 CommandParameter 引數不更新問題
- vue scoped 解決樣式不生效問題Vue
- Maven解決repository不更換的問題Maven
- 解決dnsmasq安裝好之後主機不能解析其他域名的問題DNS
- 為什麼區塊鏈能解決深度偽造和資料倫理問題?區塊鏈
- 學習網路安全能解決哪些現實問題?網路安全學習
- Linux 最常用命令(簡單易學,但能解決95%以上的問題)Linux
- 據說這款軟體能解決98%以上的跨境資料傳輸問題
- 律所管理系統能解決律師事務所存在的這些問題
- 什麼是 Hadoop ?它主要能解決 “大資料” 的哪兩個問題?Hadoop大資料
- 區塊鏈技術應用落地,區塊鏈溯源落能解決哪些問題?區塊鏈