如何编码替换排列

How to encode Permutation of Substitution

我想从密文替换为明文。但是可以有n! n 是字符数的可能性

例如

密码:[ a, b, c, d ]

普通:[ x, y, z, m ]

假设我确定其中一个组合是正确的纯文本。在这个例子中我知道有 4 个!可能是明文,但我必须在 python 中计算它,因为在我的实际问题中 n 是 10.

我要的是一段代码或算法

你需要做字母频率分析。阅读这篇文章 https://inventwithpython.com/hacking/chapter20.html

python

中有频率分析源

一旦您实现了该教程中的源代码,您就可以编写

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)

请注意,这假设明文是英文......不同语言的字母频率会有所不同(我认为至少)

不幸的是,我认为这个问题很难......为了找到最佳解决方案,你必须探索整个解决方案space(因此随着 N 增加明文字母表的长度,它变得更加困难...... )