【问题标题】:how to crack a random substitution text cypher?如何破解随机替换文本密码?
【发布时间】:2022-10-26 00:03:32
【问题描述】:

我正在阅读有关凯撒密码的内容,其中字符只是按这样的数字移动:

l=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

def shift(l,n):
    res = l[n:] +l[:n]
    return res

然后我们可以将列表向右移动 2 步,例如,得到:

l_c2= ['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b']

为了加密消息,只需将原始文本中的每个字符替换为移位的字符即可。这种方法很容易破解,因为一旦你知道了一个字符的编码版本,你就知道了所有其他字符,即使我们不知道,我们也可以尝试 26 次移位来找到正确的移位:这是少量的测试!

所以我在想如果我随机重新排序列表的元素:

import random

def randomReorder(l):
    return random.sample(l,len(l))

然后我会得到一个如下所示的列表:

l_r = ['f', 'e', 'l', 'r', 'p', 't', 'k', 'v', 'u', 'c', 'd', 'o', 'a', 'x', 'm', 'g', 'b', 'z', 'q', 's', 'h', 'j', 'i', 'n', 'w', 'y']

所以如果我用这些字母代替原文中的字母,如果一个人知道一个字符的关键,就很难预测其他的,因为它们是简单随机重新排序的, 所以对于“你好”,例如,它变成了“vpoom”。因为密码列表只是随机的,所以破解者必须测试许多重新排序的列表才能找到可以给出“更英语”结果的列表,即 10^26 种可能的排列。那么这种加密数据的方法能强大吗?还是我遗漏了一些东西,破解者可以用来破解密码?

【问题讨论】:

  • 这不只是一个cryptogram,就像我祖父母每天早上在日报上解决的那样吗?
  • 使用frequency analysis 可以很容易地破解任何替换密码,其中每个字母都映射到同一个字母。
  • @monk:如果每个字母都映射到同一个字母,那就是ROT-0,我认为不需要任何破解。 ;-)
  • @ShadowRanger 它不是 ROT-0,它是双 ROT-13,因此安全性提高了一倍。
  • “......这是 10^26 种可能的安排”。不,有26个!在这种情况下可能的排列,因为这是 26 的简单 26 排列。

标签: python list random cracking


【解决方案1】:

是的,如果您的文本可以是任何东西,但自然语言有很多冗余并且不是随机的。

解密一个随机字符串,用随机替换加密可能很难解密。

但由于文本是英文,您可以进行频率分析,例如最常出现的字母是“e”; “j”是最不常见的,依此类推。您还可以考虑字符对(例如“th”经常出现)或字符三元组等。

【讨论】:

  • 除了频率分析还有其他方法吗?