知道明文,如何发现使用的加密方案?

时间:2008-10-23 21:27:47

标签: algorithm encryption

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

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

对于cryptext:

b5 01 02 c1 e3 0d 0a
明文应该是:

3543921 or 3.543.921

对于cryptext:

41 c3 c5 07 17 0d 0a
明文应该是

1851154 or 1.851.154

我相信0d 0a只是填充。是从win-1252编码收集的数据(dunno,如果重要)

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

编辑2:添加了几个样本。

7 个答案:

答案 0 :(得分:3)

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

编辑:

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

决定这项任务有多容易的事情是:

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

成功的关键是不要沮丧;密码分析的历史充满了所谓的牢不可破的代码被破解的故事;也许最着名的是来自第二次世界大战的Enigma机器,它的破解促成了现代计算机的发展。

答案 3 :(得分:2)

我们可以从您提供的内容中说出一些内容:

  • 在每种情况下密文长度为7个字节,它不太可能是块密码(因为块密码一次加密一个块,它们的长度将是块大小的倍数,而56位的块大小是相当的不大可能*)。
  • 密文的长度和明文中的字符数在每种情况下是相同的,因此可以直接编码数字ascii并应用流密码。
  • 将明文(如ascii)和密文混合在一起,既没有给出单个重复的八位字节,也没有为每个密文提供相同的密码流,因此它不是一个简单的密码。它也不是一个使用相同密钥的简单流密码,除非一些密文字节是IV。
  • 最后两个字节在密文中是相同的,但不是在明文中。这可能是巧合,但也可能表示您建议的填充。如果它们是填充,则必须使用其他一些编码机制。

您知道所有加密值是否为整数,或者其他值是否也可能?

答案 4 :(得分:1)

确定没有相应密钥的算法可能并不完全有用。

如果文字足够小,并且你有明文,你为什么要弄明白呢?当然,除了好奇之外,还有什么呢?

答案 5 :(得分:1)

没有确定的方法可以说明,但密文中经常会有提示。它是否真的加密(带某种键)?或者它只是哈希和(可能)腌制。

如果它是哈希,你可以很幸运,只需谷歌一对匹配(假设你有任何词典单词),因为已经有预先散列的词典在线。

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

答案 6 :(得分:0)

我认为XOR是一种易于解密的方案,这是一种误解。理论上最强的加密形式是一次性填充:只是一串预定位,你用你的明文和... ...

另一方面,

有限XOR ...