2016-10-21 22 views
0

我想從密碼文本替換爲純文本。但是可以有n!可能其中n是字符如何編碼替換置換

例如數量

暗號:[ a, b, c, d ]

平原:[ x, y, z, m ]

比方說,我肯定組合的一個是正確的純文本。在這個例子中,我知道有4個!可能的明文,但我算算它的蟒蛇,因爲在我的真正的問題n爲10。

我要求的一段代碼或算法

+0

你的加密文本有多大?如果它只有10個字符,你會很困難 –

+0

加密文本是270個字符長, – eneski

回答

1

你需要做的信件頻率分析。閱讀這篇文章,它https://inventwithpython.com/hacking/chapter20.html

有源存在於蟒蛇頻率分析

一旦你實現從教程中的源代碼,然後你可以寫

def test_solution(cypher,plaintext,encrypted_text): 
    tab = string.transtab(cypher,plaintext) 
    decrypted = encrypted_text.translate(tab) 
    return (englishFreqMatchScore(decrypted),plaintext, decrypted) 

tests = [test_solution(cypher,k,enc_text) for k in itertools.permutations(plain)] 
print "SOLUTION:",max(tests) 

注意,這裏假設明文會是英語......不同的語言的字母頻率會有所不同(我認爲至少)

不幸的是,這個問題是NP我很難......爲了找到最佳的解決方案,你必須探索整個解決方案空間(如N增加明文字母的長度,它變得非常困難......)