【问题标题】:Decrypting an image [closed]解密图像[关闭]
【发布时间】:2021-05-14 05:17:42
【问题描述】:

我需要解密一个 png 文件。我无法打开/查看图像,因为它已加密。当我在命令行中对图像运行文件命令时,它说它是“数据”类型。

我知道图像是使用 XOR 加密的(就像一次性密码的情况一样),使用我不知道的密钥。

我只有图像文件,没有其他信息。我应该如何找出密钥?

【问题讨论】:

  • 冲泡大量咖啡并尝试每种组合(这称为“蛮力”),这就是为什么加密应该是牢不可破的:-)

标签: security cryptography xor one-time-pad


【解决方案1】:

您还必须知道一次性便笺簿是否与原始图像一样长。如果焊盘更短,那么它将重复直到明文结束。如果它是 1 到 7 个字节长,那真的很容易,因为 PNG 文件格式的前 8 个字节是已知的:\x89PNG\r\n\x1a\n

计算key = ciphertext[0] ^ '\x89'。如果key ^ ciphertext[1] == 'P' 那么你有你的钥匙。否则,您需要在 2 到 8 中检查 key ^ ciphertext[i] == knownHeader[i] 中的 i 以查看是否有密钥的开头。根据您找到匹配项的i,您就知道垫子有多长。之后就可以计算剩余的key bytes了。

唯一剩下的就是使用整个密钥来解密整个文件并检查它是否有意义。

【讨论】:

  • 100 次中有 99 次(假设 IHDR 是 PNG 标头之后的第一个块,并且图像宽度小于 65,536 像素),您实际上可以假设前 18 个字节为 @987654328 @。最后八个字节应以IEND 开头,这对于确认密钥长度应该很有用。
【解决方案2】:

对一个随机比特流进行异或运算将产生一个几乎随机的输出,因为每个比特以 0.5 的概率变化(参见 Shannon,1949 年)。如果您既没有密钥也没有图像,则无法恢复图像或密钥本身。

如果这是某种挑战,您可以尝试使用 XOR 的属性来发挥自己的优势。例如,如果有另一个图像与相同的密钥进行异或,并且您有该图像明文并加密,您显然可以通过将未加密的图像与加密的图像进行异或来找到密钥。或者,例如,您可以尝试猜测由于某种原因在您的上下文中显而易见的键。

如果密钥是真正随机的,并且与输入具有相同的长度,那么一次性便笺具有所有出色的功能。例如,您的密钥可能较短且重复。

您可以利用的一件事是图像文件具有已知格式,因此如果您知道它应该是什么格式,您可以找出相当多的密钥。一开始有一个神奇的数字来识别文件格式,然后根据实际的图像类型,一些字段只有很少或只有一个潜在值。让我们将它们填入正在构建的密钥中,看看是否有模式。但同样,如果密钥是真正随机的,从不重复使用,并且只要图像,就不可能恢复图像文件。

【讨论】:

  • 遗憾的是,我只有一个加密图像。
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2018-06-05
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多