Определите, защищен ли rar-файл паролем - PullRequest
4 голосов
/ 27 февраля 2012

Я бы хотел иметь возможность определить, является ли начальная часть (в идеале, первый МБ или около того) файла файлом rar, защищенным паролем. Мне не нужно просто знать, является ли это rar-файлом, мне нужно убедиться, что этот файл защищен паролем.

Возможно ли это? Я знаю, что формат rar является проприетарным, но возможно ли это?

Edit: Я хотел бы сделать это, изучив содержимое файла, либо с JavaScript, либо с Perl. У него не должно быть доступа к библиотеке rar.

Edit2: Пока, по крайней мере, с некоторой согласованностью я смог определить, что 10-й байт, по-видимому, всегда устанавливается в ноль, если шифрование не включено. Я еще не провёл достаточного количества тестов, чтобы подтвердить это надежно, но, тем не менее, это результат, который я вижу.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Мои эксперименты дали мне следующую подпрограмму:

sub is_rarfile_protected {
   my ($rar_filename) = @_;
   open my $rar_fh, '<', $rar_filename or die $!, "\n";
   sysread $rar_fh, my $mark, 25;
   return ord (substr $mark, -1) & 0b100; 
}

..., которая работает для меня до сих пор.

К сожалению, у меня не установлен Rar, поэтому я не могу проверить, будет ли он работать на всех зашифрованных паролем rar-файлах (включая многотомники и т. Д.) Или нет.

1 голос
/ 27 февраля 2012

Вы всегда можете попробовать это

Для тех, кто не может perlmonks:

Re: Определить, защищен ли файл паролем

от rubasov:

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

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

Для конкретной реализации найдите критерий хи-квадрат в CPAN (я не смотрел, но я почти уверен, что вынайти некоторую реализацию) и попытаться поэкспериментировать с ней, может ли она быть достаточно хорошей для вашей цели.

...