【问题标题】:Knowing the plaintext, how to discover the encryption scheme used? [closed]知道明文,如何发现使用的加密方案? [关闭]
【发布时间】:2010-09-18 21:32:07
【问题描述】:

我在 DBF 表中有一些 char() 字段,这些字段由项目中的过去开发人员加密。

但是,我知道解密几条记录的明文结果。如何确定解密原始数据的函数/算法/方案? 以下是一些示例字段:

对于密文:

b5 01 02 c1 e3 0d 0a

明文应该是:

3543921 or 3.543.921

对于密文:

41 c3 c5 07 17 0d 0a

明文应该是

1851154 or 1.851.154

我相信0d 0a 只是填充。来自以 win-1252 编码收集的数据(不知道是否重要)

编辑:这是为了好奇和学习。我希望能够理解所使用的加密(看起来很简单,虽然是二进制数据)来恢复我不知道明文的元组的字段值。

编辑 2:添加了几个示例。

【问题讨论】:

  • 还有密文-明文对的例子吗?
  • 对不起,我真的没有更多的了 :-(

标签: algorithm encryption


【解决方案1】:

在一般情况下没有简单的方法。这个问题太笼统了。尝试发布这些纯 + 加密字符串。

编辑:

  • 为了学习,你可以阅读这篇文章:Cryptography on Wikipedia
  • 如果您真的相信加密很简单 - 检查它是否是字节(或字)级 XOR - 请参阅以下伪代码

    for (i in originalString) {
    newString[i] = originalString[i] ^ CRYPT_BYTE;
    }
    

【讨论】:

  • 然后添加“挑战”标签并利用群众的智慧......当然,假设它没有任何敏感
【解决方案2】:

假设它不是简单的替换密码(尝试频率分析)或应用不当的异或(例如,重用密钥;尝试将两个密文与已知明文异或,然后查看结果是否是明文的异或;或尝试将密文与自身移动一定数量的字节进行异或运算),您可能应该假设它是具有未知密钥的众所周知的流/块密码(很可能由 ASCII 字符组成)。如果您有足够大的密文-明文对样本,您可以首先检查具有相同前几个字符/字节的明文是否具有具有相同前几个字符/字节的密文。在那里,您可能还会看到它是块密码还是流密码,以及是否涉及任何反馈机制。填充(如果存在)也可能表明它是分组密码而不是流密码。

【讨论】:

    【解决方案3】:

    根据你想投入多少努力,你应该能够到达某个地方。首先阅读cryptanalysis,尤其是methods of cryptanalysis

    决定这项任务的难易程度的因素是:

    • 使用的加密方法有多好;如果它是最近的、备受推崇的方法,例如 RSA 或 AES,那么您可能不走运
    • 你有多少密文和明文——越多越好
    • 它是什么类型的数据——简单的文本最容易,而随机数据最难
    • 数据是否全部使用同一个密钥加密,或者是否使用了多个密钥。

    成功的关键是不要灰心;密码分析的历史充满了所谓的牢不可破的密码被破解的故事;也许最著名的是二战时期的 Enigma 机器,它的破解促成了现代计算机的发展。

    【讨论】:

      【解决方案4】:

      我们可以从您提供的信息中看出几点:

      • 在每种情况下,密文长度为 7 个字节,它不太可能是块密码(因为块密码一次加密一个块,它们的长度将是块大小的倍数,56 位的块大小很漂亮不太可能*)。
      • 密文的长度和明文中的字符数在每种情况下都是相同的,因此可以直接将数字编码为 ascii 并应用流密码。
      • 对明文(ascii)和密文进行异或运算既不会产生单个重复的八位字节,也不会产生相同的加密流,因此它不是一个简单的密码。它也不是一个简单的流密码,对两者使用相同的密钥,除非某些密文字节是 IV。
      • 最后两个字节在密文中相同,但在明文中不同。这可能是巧合,但也可能表示您建议的填充。如果它们是填充,则必须使用其他一些编码机制。

      你知道是否所有的加密值都是整数,还是其他值也是可能的?

      【讨论】:

      • AFAIK 这些示例的明文是带有或不带有千点 [.] 分隔符的 7 位整数
      • 分析得很周到……
      【解决方案5】:

      在没有相应密钥的情况下确定使用的算法可能并不完全有用。

      如果文本足够小,并且你有明文,你为什么要弄清楚呢?当然,除了出于好奇之外?

      【讨论】:

        【解决方案6】:

        没有确定性的方式来判断,但密文中通常有提示。它真的加密了吗(使用某种密钥)?还是只是散列和(可能)加盐。

        如果它是散列的,你可能会很幸运,只需在谷歌上搜索匹配的一对(假设你有任何字典单词),因为在线已经有预散列的字典。

        如果您有密文的示例,您可以发布它,有人可能会识别密文格式...

        【讨论】:

          【解决方案7】:

          我认为 XOR 是一种易于解密的方案是一种误解。理论上最强的加密形式是一次性填充:只需一串预先确定的位,您可以将其与明文异或...

          另一方面,有限异或...

          【讨论】:

            猜你喜欢
            • 2021-02-25
            • 2019-09-21
            • 2016-10-17
            • 2011-10-03
            • 2011-03-04
            • 1970-01-01
            • 1970-01-01
            • 2021-12-06
            • 1970-01-01
            相关资源
            最近更新 更多