Список только файлы, которые не зашифрованы - PullRequest
1 голос
/ 02 марта 2012

Во-первых, я не эксперт по Unix, поэтому, пожалуйста, простите мне немного наивности в моем вопросе.

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

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

Я могу запустить:

file * | egrep -w 'text|XML'

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

Этовозможно в однострочной команде?

РЕДАКТИРОВАТЬ: зашифрованные файлы шифруются с помощью openSSL

Команда, которую я использую для дешифрования файлов:

openssl -d -aes128 -in <encrypted_filename> -out <unencrypted_filename>

Ответы [ 2 ]

1 голос
/ 03 марта 2012

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

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

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

У SO есть несколько других вопросов о поиске случайности или энтропии, и многиеиз них есть хорошие предложения, как этот: Как определить статистическую случайность двоичной строки?

Удачи!

1 голос
/ 03 марта 2012

Ваша проблема не тривиальна. Файловая команда solaris использует "magic" - / etc / magic. Это набор правил, чтобы попытаться определить тип файла. Это не идеально.

Если вы прочитали файл / etc / magic, обратите внимание, что последний столбец - это словоблудие, которое содержится в выходных данных команды file, когда она что-то распознает, какая-то структура в файле.

По сути, команда file просматривает первые несколько байтов файла, как это делает семейство системных вызовов exec (). Таким образом, # / bin / sh в самой первой строке файла, в первых символах строки, определяет для exec () «интерпретатор команд», который exec () должен вызывать для «запуска» файла. файл получает ту же идею и говорит «текст команды», «текст awk» и т. д.

Ваши проблемы заключаются в том, что вы должны решить, какие типы файлов вы будете видеть как вывод из файла. Вам нужно потратить время на изучение незашифрованных файлов, чтобы увидеть, какие «ответы» вы можете ожидать от файла. В противном случае вы можете запустить файл по всему дереву каталогов и отсортировать все, что вы считаете правильными ответами.

find /path/to/files -type f -exec file {} \; | nawk -F':' '!arr[$2]++'  > outputfile

Это дает вам список четких ответов о том, что файл думает, что у вас есть. Поместите те, которые вам нравятся, в файл, назовите его good.txt

find /path/to/files -type f -exec file {} \; > bigfile
nawk -F':' 'FILENAME=="good.txt" {arr$1]++}
          FILENAME=="bigfile" {if($2 in arr) {print $1}} ' good.txt bigfile > nonencryptedfiles.txt

ЭТО НЕ 100% гарантировано. файл можно обмануть.

...