我在电脑上找到了一个旧的 .rar 文件,但我记不清密码了。我大概知道它是什么,所以我用 c# 编写了一个程序,使用 7ziplib 来强制执行一堆排列。
几千个之后,它找到了一个匹配项。当我使用找到的密码在 7zip 中打开文件时,它会打开但不显示任何文件。当我尝试在 Winrar 中打开它时,它显示存档已损坏或密码无效。
7ziplib 将未压缩的文件大小报告为 -1。
我对同一文件夹中的另一个 zip 文件运行了相同的暴力破解程序,该文件具有相似但不相同的密码,并且表现出相同的行为。
同一文件夹中还有其他未受密码保护的 rar 文件,可以正常打开。
有没有算法可以解释这种情况?是不是因为我找到的密码通过了密码检查的一个阶段,但没有通过其他阶段?或者是存档已损坏?
如果有帮助的话,该格式被报告为 Rar4,谷歌表示它使用 AES-128,但维基百科指出不存在,因为它从版本 2.9 跳转到 5。
答案1
据我所知,RAR 的所有校验和值(包括文件和存档头的校验和值)都使用 32 位 CRC 值。因此,在暴力破解密码时,即使解码后的头数据(以及任何后续文件数据)都是垃圾,头校验和匹配的概率也只有 2^32 分之一(约 40 亿分之一),因为密码(以及解密密钥)实际上是错误的。我暴力破解 RAR 的经验似乎证实了这一点。
对此有任何算法解释吗? 会不会是我找到了一个密码,它能通过密码检查的一个阶段,但不能通过另一个阶段?
事情大致就是这样的。