
Я нашел старый файл .rar на своем компьютере, но не мог вспомнить пароль. У меня было приблизительное представление о том, что это было, поэтому я написал программу с использованием 7ziplib на C# для перебора нескольких перестановок.
После нескольких тысяч он нашел совпадение. Когда я открываю файл в 7zip, используя найденный пароль, он открывается, но не отображает файлы. Когда я пытаюсь открыть его в Winrar, он говорит, что архив поврежден или неверный пароль.
7ziplib сообщает размер несжатого файла как -1.
Я запустил ту же самую программу подбора паролей для другого zip-архива в той же папке, который имел похожий, но не идентичный пароль, и наблюдалось то же самое поведение.
В той же папке есть и другие файлы rar, которые не защищены паролем и открываются нормально.
Есть ли этому какое-то алгоритмическое объяснение? Может ли быть, что я нашел пароль, который проходит один этап проверки пароля, но не проходит другой? Или архив поврежден?
Если это поможет, формат сообщается как Rar4, который, по словам Google, использует AES-128, но Википедия утверждает, что он не существует, поскольку он переходит с версии 2.9 на 5.
решение1
Насколько мне известно, RAR использует 32-битные значения CRC для всех значений контрольной суммы, как файлов, так и заголовка архива. Поэтому при переборе паролей у вас есть 1 из 2^32 (~ 1 из 4 миллиардов) шансов на совпадение контрольной суммы заголовка, даже если декодированные данные заголовка (и любые последующие данные файла) являются мусором, поскольку пароль, а следовательно, и ключ дешифрования, на самом деле неверны. Мой опыт перебора RAR, похоже, подтверждает это.
Есть ли этому какое-то алгоритмическое объяснение? Может ли быть, что я нашел пароль, который проходит один этап проверки пароля, но не проходит другой?
Примерно так и произошло.