查找用于加密的密钥

时间:2011-03-30 01:53:21

标签: encryption xor

我有这个伪代码:

for i = 0 ... P.length
    C[i] = P[i] XOR K[i%K];
    K[i%k] = ( K[i%k] +P[i] ) mod 64;

其中P是纯文本,C是加密文本,K是密钥,k表示密钥K的长度(注意k和K的上限不同)。

请注意,这是一个功课,但它不是我的,我只是很好奇如何解决它,因为我一直都喜欢加密主题。

这里的任务是推导出纯文本P,如果给你C,你就知道关于密钥的以下内容。

  

密钥被选为来自this TWL Word List的随机字。 0到999之间的随机数附加到所选单词的末尾。概率为0.5时,第一个字符大写。然后将小写“o”转换为“0”(零),每个“o”的概率为0.5。类似地,每个小写的'l'(ell)被转换为'1'(一个),每个'e'变为'3',每个''变为'5',每个't'变为'7',所有概率0.5。

该程序需要不到10秒的时间并消耗少于1 GB的内存。给出这个问题的班级有中档笔记本电脑,所以我会认真对待这10秒钟(虽然,因为我没有真正解决作业,所以我没有时间限制)。

解决这个问题的好方法是什么?因为这似乎没有蛮力在这里有用。

P.S。 IF “%”是模块化的划分...那么“mod”会做什么?

修改
纯文本P是从维基百科中获取的随机文本,其中所有不是字母或数字的字符都被删除(包括空格)我几乎可以肯定每个字符都与[a-zA-Z0-9]相匹配如果不匹配则删除。

编辑2:
This .pdf可能有助于澄清。在那里,您将找到P输出和密钥的示例。

1 个答案:

答案 0 :(得分:1)

我是其中一个必须解决这个问题的学生,我找到了答案,我的分数是0.934分1,我觉得第一次尝试很好。无论如何,我不会在这里发布我的代码'因为我相信如果你真的想要解决你必须为之奋斗的东西(我知道,我知道),但我可以给你一些如何解决它的提示。 在解决这个问题时你可能会注意到的一点是,当Key的键长等于你试图用来解密文本的键的键长时,会出现一个特征,你会发现像“那个”这样的词“和”in“我指的是你在英文文本中找到的最常见的单词。如果您已经知道密钥的长度,您可以开始寻找它。请记住,有关键构造的规则,如果使用这些规则,您甚至不必使用TWL WORD LIST。考虑一下,你会发现整个问题只是一个乘法和替换问题(至少我的方法)。 我希望这些提示可以帮助那些必须执行此计划的人,如果您有其他问题可以问我;)我会尽力帮助您。