想要解码算法

时间:2010-04-26 08:20:40

标签: algorithm encryption decode

我会定期收到编码的PDF文件。编码的工作原理如下:

  • PDF可以在Acrobat Reader中正确显示
  • 全选并通过Acrobat Reader
  • 复制测试
  • 并粘贴在文本编辑器中
  • 将显示内容已编码

所以,例子是:

13579 -> 3579;
hello -> jgnnq

它基本上是ASCII字符的偏移量(可能是交换)。

问题是当我只能访问少量样本时,如何自动找到偏移量。我无法确定编码偏移是否已更改。我所知道的是一些文本通常(如果不总是)显示,例如PDF中的“名称:”,“摘要:”,“总计:”。

谢谢!

编辑:感谢您的反馈。我试着把问题分成更小的问题:

第1部分:How to detect identical part(s) inside string?

5 个答案:

答案 0 :(得分:5)

你需要蛮力。

如果这些模式很简单,就像你的例子中的+2字符代码一样(+2字符代码)

h i j
e f g
l m n
l m n
o p q

1 2 3
3 4 5
5 6 7
7 8 9
9 : ;

你可以像这样轻松地实现检查知识词

>>> text='jgnnq'
>>> knowns=['hello', '13579']
>>>
>>> for i in range(-5,+5): #check -5 to +5 char code range
...     rot=''.join(chr(ord(j)+i) for j in text)
...     for x in knowns:
...         if x in rot:
...             print rot
...
hello

答案 1 :(得分:3)

PDF是否包含符号(如数学或校对)或自然语言文本(英语,法语等)?

如果是后者,你可以使用频率图表来表示字母(有向图,三字母和一个小词典,如果你想要去远方)。我想可能有一些在线。 Here's一个开始。更具体地说是letter frequencies

然后,如果你确定这是一个凯撒班次,你可以抓住前1000个字符左右,并通过增加金额(我猜)127左右来向前移动它们。获取结果文本并计算频率与上面找到的平均频率的匹配程度。 Here是关于此的信息。

维基百科上的链接字母频率页面仅显示字母,因此您可能希望在计算中排除它们,或者更好地在其中找到包含它们的图表。您可能还希望将整个结果文本转换为小写或大写(您的首选项),以便将字母视为相同而不管大小写。

编辑 - 看到有关字符交换的评论

在这种情况下,它是一个替换密码,它仍然可以自动断开,虽然这次你可能想要一个有用的图表图表来进行额外的分析。这很有用,因为在字母分析方面很可能会有一个比普通语言“更接近”的替换,但是比较有向图的频率会让你排除它。

另外,我建议移动字符,然后看看频率与平均语言频率的匹配程度。实际上,您可以先计算密文中的频率,然后尝试将它们与好的值对齐。我不确定哪个更好。

答案 2 :(得分:1)

嗯,这很难。

我唯一可以建议的是使用字典(以及一些替换密码算法)可能有助于解码某些文本。

但我无法看到一个解决方案,可以根据您描述的方案为您解码所有内容。

为什么不粘贴一些示例输入,我们可以在解码它之前。

答案 3 :(得分:1)

只有你有可能有很多例子(例子计数停止:可能获得所有组合或只是线性值依赖或场景的想法)。

也是这个问题:How would I reverse engineer a cryptographic algorithm?有一些建议。

答案 4 :(得分:0)

编码文件是否在Acrobat Reader以外的PDF阅读器中正确打开?如果是这样,您可以使用PDF库(例如PDF Clown)并使用它以编程方式提取所需的文本。