2011-03-30 63 views
3

我有这样的伪代码的键:寻找用于加密

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'以每个'o'的概率0.5转换为'0'(零)。类似地,每个小写'l'(ell)被转换为'1'(一),每个'e'到'3',每个''到'5',并且每个't'到'7',全部与概率0.5。

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

什么是解决此问题的好方法?因为这里看起来好像蛮力不会有任何用处。

P.S.如果“%”是模块化的划分......那么“MOD”是做什么的?

编辑:
纯文本P从维基百科采取了随机文本中不属于字母或数字的所有字符被剥离出来(包括空格),我几乎可以肯定,每个字符与匹配[a-zA-Z0-9],如果不匹配则删除。

编辑2:
This .pdf可能会有助于澄清。在那里你会找到P输出和键的例子。

+0

我假设'mod'和'%'是指同一件事,只是教授想保持简单。 – sarnold 2011-03-30 02:03:55

+0

mod 64很奇怪。如果我理解正确,密钥的长度肯定会是5? (该列表只有4个字母的单词,并且我们添加了一个数字)。密钥和明文是ASCII编码的,还是什么? – 2011-03-30 08:39:51

+0

第二个想法,64表明,也许OP意味着首字母AZ的编码为0-25,az为26-61,数字加上其他2个字符作为最后2(base64样式),或者某些变体这个,也可能密码文本也是这样编码的。请澄清。 – 2011-03-30 10:42:39

回答

1

我是一个必须解决这个问题的学生,我找到了答案,我的分数是0.934,我认为这是第一次尝试的好。无论如何,我不会在这里发布我的代码,因为我相信如果你真的想解决一些你必须为它而战的东西(我知道,我知道),但我可以给你一些关于如何解决它的提示。 您在处理此问题时可能会注意到的一件事是,当Key的密钥长度等于您尝试用于解密文本的密钥的密钥长度时,会出现一个特征,您会发现像“that “”和“”中的“我的意思是你在英文文本中找到的最常用的单词。如果你已经知道密钥的长度,你可以开始寻找它。请记住,构建密钥有一些规则,如果您使用这些规则,则不必使用TWL WORD LIST。想一想,你会发现整个问题只是一个乘法和替代问题(至少我的方法)。 我希望这个提示可以帮助那些必须做这个程序的人,如果你有另一个问题,你可以问我;)我会尽力帮助你。