【发布时间】: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