Как использовать Rar или WinRAR для создания зашифрованного архива с паролем, начинающимся с двойной кавычки?

Я пытаюсь создать командную строку для сжатия в виде файла RAR, используя пароль через командную строку в Windows 7. Я установил WinRAR 5.31 x64.

У меня работает следующая команда:

rar a -r -m0 -hp"!(/!$!#!#=)\%" C:\files1.rar" *.*

Пароль !(/!$!#!#=)\%.

Моя проблема возникает, если я хочу поставить двойные кавычки " внутри своего пароля, например, в начале:

rar a -r -m0 -hp""!(/!$!#!#=)\%" C:\files1.rar" *.*

Пароль должен быть "!(/!$!#!#=)\%.

У меня это не работает, я пытался поставить \ перед ", но это тоже не работает.

Может ли кто-нибудь провести меня через это, чтобы понять этот специальный символ в моем пароле?


person felipe    schedule 08.01.2018    source источник


Ответы (2)


Интерпретаторы команд Windows cmd.exe и Rar.exe сами определяют, как аргументы, указанные в командной строке, интерпретируются при анализе командной строки. Строки аргументов, содержащие пробел или один из этих символов &()[]{}^=;!'+,`~<|>, должны быть заключены в двойные кавычки. Это очень затрудняет передачу символа двойной кавычки как части строки аргумента в консольное приложение, особенно в начале строки аргумента.

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

Руководство по консольной версии WinRAR представляет собой текстовый файл Rar.txt в папке программных файлов WinRAR. В этом руководстве можно прочитать, что Rar.exe поддерживает чтение переключателей из переменной окружения RAR. Используя эту переменную среды и специальный анализ интерпретатора командной строки Windows в командной строке SET, можно создать архив RAR из командной строки с паролем, начинающимся с одной прямой двойной кавычки.

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "RAR=-hp""!(/!$!#!#=)\%%""
"%ProgramFiles%\WinRAR\Rar.exe" a -r -m0 -x"%~f0" "%USERPROFILE%\Desktop\files1.rar" *.*
endlocal

Переключатель -hp считывается из переменной среды RAR в дополнение к другим переключателям, указанным непосредственно в командной строке RAR, как описано в руководстве.

Переменная среды RAR определяется с использованием синтаксиса set "variable=value", как подробно объясняется в ответе на Почему после использования не выводится строка с 'echo %var%' 'установить var = text' в командной строке?

Пароль/парольная фраза с пробелом или одним из этих символов &()[]{}^=;!'+,`~<|> должен быть заключен в двойные кавычки в командной строке Windows. По этой причине Rar.exe удаляет из переданного пароля/парольной фразы первую и последнюю двойные кавычки, если они есть в начале и/или в конце. Таким образом, невозможно определить пароль с помощью "!(/!$!#!#=)\%. Пароль должен быть определен с помощью двух дополнительных двойных кавычек с использованием ""!(/!$!#!#=)\%", чтобы действительно используемый пароль начинался с прямого символа двойной кавычки.

В пакетном файле % отмечает начало/конец ссылки на переменную среды, за исключением того, что она экранируется еще одним %.

Итак, наконец, командная строка set "RAR=-hp""!(/!$!#!#=)\%%"" определяет переменную среды RAR с переключателем -hp, передающим строку "!(/!$!#!#=)\% в Rar.exe в качестве пароля для использования при шифровании.

Архив RAR files1.rar создается на рабочем столе пользователя этим кодом, т.к. корень каталога C: обычно защищен от записи.

Примечание: Rar и WinRAR интерпретируют *.* иначе, чем *, как также объясняется в руководстве, по сравнению с функциями ядра Windows, интерпретирующими их одинаково. Rar добавляет в файл архива RAR только файлы, содержащие точку в имени файла, при использовании *.*. Так что вам лучше использовать только * в качестве подстановочного знака.

Переключатель -x"%~f0" предотвращает добавление пакетного файла также в файл архива RAR, если он сохраняется в текущем каталоге при выполнении пакетного файла. Запустите в окне командной строки call /? для объяснения %~f0 — полное имя аргумента 0, что означает имя пакетного файла с расширением и полным путем.

person Mofi    schedule 14.01.2018

В дополнение к ответу Мофи:

Особенно для пользователей Linux, использующих winrar/rar из командной строки, может быть полезно понять, что rar эффективно принимает «ключевые файлы», что может устранить необходимость возиться с кавычками как частью пароля.

Задокументированная максимальная длина пароля Rar составляет 127 символов/байт. Неясно (мне), какие именно символы являются частью пространства пароля, но, по крайней мере, строки в кодировке base64 работают. Однако rar в настоящее время использует функцию получения ключа на основе пароля на основе на PBKDF2 с использованием хеш-функции HMAC-SHA256, размер блока которой составляет 512 бит. Согласно PBKDF2, пароли, длина которых превышает размер блока хеш-функции, сначала предварительно хэшируются. в дайджест из 256 бит, который затем используется в качестве пароля (вместо исходного пароля). Чтобы избежать этого, пароль архива, который вы выберете, должен быть no длиннее 512 бит или 64 символов.

В строке с кодировкой base64 каждый символ представляет 6 бит данных; Таким образом, пароль из 64 символов составляет 384 случайных бита, которые могут быть получены из 48 случайных байтов.

rar a -hp"$(dd if=/dev/urandom bs=48 count=1 | base64 -w0 | tee /tmp/pwd)" archive

Конвейер dd выше будет считывать 48 (псевдо)случайных байтов из устройства-источника случайных чисел ядра (неблокирующего), преобразовывать их в 64-символьный пароль, указывать rar использовать этот пароль для получения 256-битного (AES256) шифрования. ключ (формат RAR5) и в то же время сохранить пароль в файле `/tmp/pwd'.

К архиву можно снова получить доступ, например. перечисленных, прочитав пароль обратно из файла, например, так:

rar l -p"$(cat /tmp/pwd)" archive.rar

Файл паролей можно безопасно хранить отдельно или вместе с архивом, в последнем случае (разумеется) после его шифрования, т.е. с gpg, используя свой собственный открытый ключ, чтобы заблокировать пароль архива под вашим личным ключом/ключевой фразой. Все это направлено на удобное и эффективное использование пространства паролей/ключей rar.

Замечу, что я не углублялся в общедоступный исходный код unrar; вышеизложенное просто основано на общей документации. Кроме того, я не знаю, можно ли заставить вышеперечисленное работать под Windows.

person ozzy    schedule 18.11.2018