文本解密,基于字母频率的方法(关于成本函数的问题)

时间:2015-04-18 21:37:06

标签: algorithm text frequency analysis encryption

我想基于频率分析来破译文本。编程不是问题,但存在一些数学上的困难。

(不用担心,不是因为黑客行为,我想要了解Zodiac 340密码,但问题只是解密http://zodiackillerciphers.com/wiki/images/7/7d/340-cipher-hi-resolution.jpg,而不是密码的其他问题。)

我已将其分解为5个与成本函数相关的简短问题,以显示我的努力,简短答案很好,任何帮助表示赞赏。我的问题是成本函数中值的差异非常小。

鉴于

  1. 包含任意数量符号的文字,从现在开始称为密码。密码是英文的。密码中的每个符号仅代表一个字母,但一个字母可以通过几个符号表示。我们不知道是否有空格(但是必须由成本函数评估的字符串将以空格分隔,并且只有字母A-Z)。
  2. 字母频率分析(A-Z和空格):单字母,字母对和字母三元组。英语中最常用的4000个单词或使用sowpods拼字游戏的“所有”单词。
  3. 有关频率分析的问题:

    1. 使用sowpod检查最常用的单词或所有单词是否更好(可能删除不在4000个最常用单词中的2个和3个字母单词)?
    2. 对于字母对和三元组:最好只存储它们的频率,还是以P(A | B)形式存储(A的概率跟随B)和P(C | AB)形式三胞胎?
    3. 概念

      如果不感兴趣,请跳过。我不想在这里详细介绍,有几种方法可以使用。粗略草图:

      1. 生成(半)随机解决方案
      2. 基于成本功能
      3. 对解决方案进行本地优化
      4. 重新开始并转移一些获得的知识
      5. 停滞一段时间后,在本地优化之前在固定位置引入空格(如果消息没有空格),尝试相同的事情。
      6. 比较2个检索到的解决方案并返回更好的解决方案
      7. 成本函数

        成本函数如何?一般可以表达为:

        w1 * letterCost + w2 * pairCost + w3 * tripletCost + w4 * wordCost

        所有轮动的总和是:

        w1 + w2 + w3 + w4 = 1

        有关费用函数的问题

        1. 现在用简单的频率忽略单词(w4 = 0)你可以只计算频率并取平方差(这就是我现在正在做的事情)。我想知道的是:w1 = w2 = w3或w1 = 27 * w2 = 27 * 27 * w3更合理吗?

        2. 如何处理条件概率?

        3. 您如何整合有关单词的知识?只计算有多少真正的英语单词,可能按它们的长度加权,还是有更聪明的方法?

1 个答案:

答案 0 :(得分:4)

在我看来,你的问题来自过于笼统的概念。如果您不精确算法,则无法计算成本函数。我可以提出一个方法来确定你的概念的第二点:

  1. 计算随机的预期值(例如:如果您有10万个字母,则随机三元组应出现5次)
  2. n 为加密文字中的字母数。然后为Letter [y],Pair [y] [y + 1],Triplet [y] [y + 1] [y + 2]
  3. 的每个字母增加值
  4. 如果某些数据的出现明显大于 1中计算出的数值,那么请尝试判断您的答案接近程度。
  5. 仍然,第3点和“判断”是非常笼统的,但基于此我可以给你几个答案:

    有关费用函数的问题

    1. 最好只使用最常用的单词,因为它可以为您提供有关偏离随机结果的信息。持有所有的话都没有给你带来任何利润。
    2. 频率是我的推荐。我找不到保留条件概率的任何用法。
    3. 成本函数

      在我的情况下,algortihm的成本是O( n )+ const(对于长词,你可以考虑使用哈希表)+“判断”。问题仍在继续,因为很多问题取决于“判断”将如何解决。

      1. 我不知道为什么你选择像这样计算成本函数,但对我来说w1 = 27 * w2 = 27 * 27 * w3听起来更合理,因为它不太可能比平均长词有很多出现。
      2. 在我的解决方案中,使用条件概率没有必要和优势。
      3. 这个问题是另一个大问题,在我看来有很多常见的“生成(半)随机解决方案”。让我们说你猜了字母't','h','e','y',.你的算法应该检测单词'the','they','they',但完全错过单词'和','work','no','will'。您可以使用单词的特征,例如'the'是常用前缀,'will'3和4字母相同,等等。这使解决方案复杂化,但它应该会给出更好的结果。