Как проверить пароль архива из командной строки

Проверка пароля архива без извлечения файлов полезна, когда нужно убедиться, что введённый секрет совпадает с тем, который использовался при создании архива, либо подобрать его автоматическим способом. В командной строке это делается с помощью утилит, поддерживающих режим тестирования (test) и позволяющих передать пароль как параметр. Ниже описаны основные инструменты, их синтаксис, ограничения и рекомендации по безопасному использованию.

Подготовка и меры предосторожности

Пароль, передаваемый в командной строке, может попасть в историю оболочки, в список процессов (через ps) или в логи терминала. Чтобы снизить риск раскрытия:

  • Вводите пароль через read -s (без эха) и сохраняйте его в переменной, а затем используйте переменную в команде.
  • Если нужен одноразовый файл с паролем, создайте его с правами 600 (chmod 600) и удалите сразу после использования.
  • Проверяйте версию утилиты (unzip -v, 7z, unrar) – некоторые старые сборки не поддерживают современные методы шифрования (например, AES‑256 в ZIP).
  • Работайте в отдельной директории или в временном каталоге (mktemp -d) чтобы избежать случайного перезаписывания файлов.

Основные утилиты и их синтаксис

ZIP‑архивы

Для формата ZIP наиболее часто используются unzip и 7z.

  • unzip – проверка: unzip -t -P <пароль><архив.zip>. Извлечение: unzip -P <пароль><архив.zip> -d <каталог>.
  • 7z – проверка: 7z t -p<пароль><архив.zip>. Извлечение: 7z x -p<пароль><архив.zip> -o<каталог>.

Примечание: традиционное шифрование ZIP (ZipCrypto) поддерживается везде; AES‑шифрование доступно только в тех сборках, где включена поддержка libzip или 7z с соответствующим плагином.

RAR‑архивы

Для RAR удобно использовать unrar (версии 5.x и выше) либо 7z.

  • unrar – проверка: unrar t -p<пароль><архив.rar>. Извлечение: unrar x -p<пароль><архив.rar><каталог>.
  • 7z – проверка: 7z t -p<пароль><архив.rar>. Извлечение: 7z x -p<пароль><архив.rar> -o<каталог>.

Примечание: unrar свободно распространяется только для распаковки; создание RAR‑архивов требует лицензионной версии rar.

Собственный формат 7z

Утилита 7z является нативной для формата 7z и поддерживает AES‑256.

  • Проверка: 7z t -p<пароль><архив.7z>.
  • Извлечение: 7z x -p<пароль><архив.7z> -o<каталог>.

Другие форматы

Для архивов tar с гzip/bzip2/xz сжатием пароль не применяется напрямую – шифрование реализуется внешними инструментами (gpg, openssl enc). Поэтому проверка пароля в таких случаях выполняется через расшифровку потока перед передачей в tar.

Как проверить пароль без извлечения

Режим тестирования (-t у unzip, t у 7z и unrar) проверяет целостность архива и correctness пароля, не распаковывая файлов. Команда возвращает код завершения:

  • 0 – архив цел и пароль верный (или архив не зашифрован).
  • не‑0 – ошибка: неверный пароль, повреждённый архив или неподдерживаемый метод шифрования.
  • Пример проверки ZIP‑архива с переменной пароля:

    1. read -rs password (вводите пароль без эха).
    2. unzip -t -P «$password» archive.zip.
    3. if [ $? -eq 0 ]; then echo «Пароль верный»; else echo «Неверный пароль или ошибка архива»; fi.

    Как извлечь с проверкой пароля

    Если тест прошёл успешно, можно сразу приступить к распаковке. Используйте те же параметры пароля, что и при тесте.

    Пример для RAR:

    1. read -rs password.
    2. unrar x -p»$password» archive.rar ./extracted.
    3. Проверьте код возврата $? – 0 означает успешную распаковку.

    Обработка специальных символов и пробелов в пароле

    Пароли могут содержать пробелы, кавычки, знаки доллара, обратный слеш и другие символы, которые оболочка интерпретирует особо. Чтобы избежать неправильной передачи:

    • Заключайте пароль в одинарные кавычки, если он не содержит одинарных кавычек: -P ‘пароль с пробелом и $’.
    • Если пароль содержит одинарную кавычку, используйте конструкцию ‘»‘»‘ для её экранирования: -P ‘par'»‘»‘ole’ (получается par’ole).
    • Более универсальный способ – передавать пароль через переменную, как показано выше; переменная подставляется оболочкой после разбора кавычек, поэтому специальные символы сохраняются.
    • Избегайте использования echo $password в видимых командах – это попадает в историю и может быть увидено другими пользователями через ps.
    • Типичные ошибки и как их диагностировать

      При работе с защищёнными архивами часто встречаются следующие ситуации:

      • Неверный пароль – утилита выводит сообщение вроде bad password (unzip), Wrong password (7z) или Failed to open archive (unrar) и возвращает ненулевой код.
      • Повреждённый архив – сообщения о CRC failed, unexpected end of archive или invalid or incomplete multibyte sequence. В этом случае проверка пароля невозможна; потребуется попытка восстановления (zip -FF, 7z t без пароля, rar repair).
      • Неподдерживаемый метод шифрования – например, старый unzip не распознаёт AES‑шифрованный ZIP и пишет unsupported compression method. Решение – обновить утилиту или использовать 7z, который поддерживает оба типа.
      • Пароль содержит символы, которые оболочка интерпретирует – если вы видите ошибку command not found или unexpected EOF while looking for matching, проверьте кавычки и экранирование.

      Сравнение утилит

      Ниже таблица, которая поможет быстро выбрать подходящий инструмент в зависимости от формата архива и требуемых функций.

      Утилита Поддерживаемые форматы (чтение/проверка) Тест пароля Извлечение Примечания
      unzip ZIP (традиционное, AES‑256 при наличии поддержки) Да (-t -P) Да (-P) Широко доступен в дистрибутивах Linux; для AES может потребоваться пакет unzip с поддержкой libzip.
      7z ZIP, 7z, RAR, ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RPM, SPLIT, TAR, WIM, XAR, Z и др. Да (-p в режиме t) Да (-p в режиме x) Универсальный инструмент; поддерживает AES‑256 для ZIP, 7z и RAR; не требует отдельных пакетов для большинства форматов.
      unrar RAR (все версии до RAR5, включая RAR5) Да (-p) Да (-p) Бесплатен только для распаковки; создание RAR требует лицензии rar. Не поддерживает ZIP.
      tar + gpg/openssl tar.gz, tar.bz2, tar.xz (с внешним шифрованием) Нет (проверка через расшифровку потока) Да (после расшифровки) Пароль применяется к файлу перед передачей в tar; проверка делается попыткой расшифровать заголовок.

      Практический порядок действий

      Следующий чек‑лист поможет избежать типичных pułapок при проверке пароля архива в терминале.

      1. Определите формат архива по расширению или с помощью file archive.
      2. Выберите утилиту, которая точно поддерживает этот формат и нужный метод шифрования (см. таблицу выше).
      3. Если пароль содержит специальные символы, подготовьте его в переменной через read -rs.
      4. Сначала выполните тест целостности: unzip -t -P «$password» archive.zip (или аналог для 7z/unrar).
      5. Проверьте код возврата ($?). Если 0 – пароль верный, переходите к извлечению; иначе анализируйте вывод сообщения об ошибке.
      6. При необходимости извлеките файлы: unzip -P «$password» archive.zip -d ./out.
      7. После работы удалите переменную пароля (unset password) и любой временный файл, содержавший её.

      Часто задаваемые вопросы (FAQ)

      • Можно ли проверить пароль без риска оставить его в истории оболочки?
      • Да. Используйте read -rs для ввода без эха и сохраните значение в переменной. После завершения работы unset переменную.
      • Что делать, если unzip сообщает «unsupported compression method»?
      • Это означает, что собранная версия unzip не поддерживает используемый метод шифрования (чаще всего AES‑256). Попробуйте 7z, который обычно включает поддержку AES из коробки, либо обновите пакет unzip до версии с поддержкой libzip.
      • Как проверить пароль архива, если он создан с помощью WinZip с AES‑шифрованием?
      • 7z и современные версии unzip (с поддержкой AES) справляются с такими архивами. Для проверки используйте 7z: 7z t -p<пароль> archive.zip.
      • Есть ли способ проверить пароль без передачи его непосредственно в командную строку?
      • Можно передать пароль через файл с ограниченными правами (chmod 600) и указать путь к файлу вместо самого пароля: некоторые утилиты accept -Pfile:/path/to/pwdfile (проверьте документацию конкретной версии). Однако не все версии поддерживают такой синтаксис, поэтому самый надёжный способ – переменная окружения или read.
      • Что делать, если архив повреждён, но я уверен, что пароль правильный?
      • Сначала попытайтесь восстановить архив: для ZIP – zip -FF archive.zip —out repaired.zip; для RAR – rar repair archive.rar; для 7z – обычно достаточно просто попытаться распаковать, 7z попытается пропустить повреждённые блоки. Если восстановление невозможно, данные могут быть безвозвратно утеряны.

      После выполнения описанных шагов вы сможете надёжно проверить правильность пароля архива, избежать типичных ошибок и сохранить конфиденциальность секретных данных при работе в терминале.

PEFile.ru