如何编码替换排列
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 增加明文字母表的长度,它变得更加困难...... )
我想从密文替换为明文。但是可以有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 增加明文字母表的长度,它变得更加困难...... )