
Кроссплатформенный набор инструментов для хеширования, предназначенный для вычисления дайджестов сообщений (MD5, SHA-1, SHA-256, Tiger, Whirlpool) с рекурсивным обходом каталогов и возможностями аудита целостности файлов.
Это md5deep — набор кроссплатформенных инструментов для вычисления хешей (дайджестов сообщений) для любого количества файлов с возможностью рекурсивного обхода структуры каталогов. Он также может принимать список известных хешей и отображать имена входных файлов, хеши которых либо совпадают, либо не совпадают ни с одним из известных хешей. Данная версия поддерживает хеши MD5, SHA-1, SHA-256, Tiger и Whirlpool.
Список изменений между релизами см. в файле NEWS.
Информацию о лицензировании этой программы см. в файле COPYING.
Инструкции по (общей) компиляции и установке см. в файле INSTALL. Вот краткая версия, которая должна работать в большинстве случаев:
sh bootstrap.sh # запускает autoconf, automake
./configure
make
make install
Обратите внимание, что для установки в расположение по умолчанию обычно требуются права root. Для этого удобно использовать команду sudo. Альтернативное расположение установки можно указать с помощью параметра --prefix скрипта configure. Например, чтобы установить в /home/foo/bin, используйте:
$ ./configure --prefix=/home/foo
Полная документация по использованию программы доступна на домашней странице проекта: https://github.com/jessek/hashdeep
Последний релиз — версия 4.4. Вот хеши для версий Win32:
По историческим причинам программа имеет различные параметры и возможности при запуске с именами "hashdeep" и "md5deep".
hashdeep имеет функцию "аудит", которая может использовать список известных хешей для проверки набора файлов. Ошибки выводятся в стандартный поток ошибок. Если файлы не указаны, чтение производится из стандартного ввода.
-a Режим аудита. Каждый входной файл сравнивается с набором известных.
Считается, что аудит пройден, если каждый входной файл соответствует ровно
одному файлу из набора известных. Любые коллизии, новые файлы или отсутствующие файлы
приведут к неудаче аудита. Использование только этого флага выводит сообщение:
либо "Audit passed", либо "Audit Failed".
-v = выводит количество файлов в каждой категории
-v -v = выводит все расхождения
-v -v -v = выводит результаты для каждого проверенного файла и каждого известного файла.
-k <файл> - Параметр -k должен использоваться для загрузки файла аудита
Для выполнения аудита:
hashdeep -r dir > /tmp/auditfile # Создать файл аудита
hashdeep -a -k /tmp/auditfile -r dir # Проверить аудит
Обратите внимание, что аудит выполняется со стандартным выходным файлом hashdeep. (Внутренне аудит вычисляется как часть процесса хеширования.)
Современные компьютерные системы на основе POSIX считают имена файлов последовательностью байтов, которая отображается так, как пожелает приложение. Это означает, что имена файлов обычно содержат ASCII, но могут содержать UTF-8, UTF-16, latin1 или даже недопустимые кодировки Unicode.
Системы на основе Windows имеют один набор API для имен файлов на основе ASCII и другой набор для имен файлов, закодированных как UCS-2, который «создает формат фиксированной длины, просто используя кодовую точку как 16-битную кодовую единицу, и дает тот же результат, что и UTF-16 для 63 488 кодовых точек в диапазоне 0–0xFFFF» согласно википедии. Однако википедия оспаривает фактическую точность этого утверждения на странице обсуждения. Совершенно ясно, что никто не может быть полностью уверен в том, что Windows делает на самом деле, и сама Windows может быть непоследовательной.
Версия 3 этой программы решала эту проблему, используя переменную TCHAR для хранения имен файлов в Windows и отказываясь их печатать, выводя вместо этого «?». Версия 4 этой программы преобразует строки TCHAR в строки std::string при первой же возможности с помощью функции Windows WideCharToMultiByte. Были добавлены флаги для экранирования Unicode при его выводе.
В Windows нет способа (по-видимому) открыть имя файла UTF-8; его необходимо преобразовать обратно в многобайтовое имя файла с помощью MultiByteToWideChar.
К счастью, нам никогда не нужно преобразовывать обратно.
Обратите внимание, что в Windows файлы, для которых вычисляется хеш, могут содержать символы Unicode, но файл с хешами должен иметь имя ASCII.
КОМПИЛЯЦИЯ ДЛЯ WINDOWS:
-D_UNICODE заставляет TCHAR определяться как 'wchar_t'.
КОМПИЛЯЦИЯ ДЛЯ POSIX:
-D_UNICODE не определён, поэтому TCHAR определяется как 'char'.
Ранее функции win32 контролировались с помощью директив #ifdef, например:
#ifdef _WIN32
_wfullpath(d_name,fn,PATH_MAX);
#else
if (NULL == realpath(fn,d_name))
return TRUE;
#endif
Также существовал файл tchar-local.h, который фактически изменял семантику функций на разных платформах с помощью таких конструкций:
#define _tcsncpy strncpy
#define _tstat_t struct stat
Это делало код очень сложным для сопровождения.
При переписывании в версии 4.0 мы изменили этот код, используя C++ функции, которые возвращают объекты, где это возможно, и избегая использования #define таким образом, чтобы на системах _WIN32 функция realpath() определялась до её использования, а основной код не содержал функции realpath(). Это можно увидеть в cycles.cpp:
/* Return the canonicalized absolute pathname in UTF-8 on Windows and POSIX systems */
std::string get_realpath(const TCHAR *fn)
{
#ifdef _WIN32
/*
* expand a relative path to the full path.
* http://msdn.microsoft.com/en-us/library/506720ff(v=vs.80).aspx
*/
TCHAR absPath[PATH_MAX];
if(_fullpath(absPath,fn,PAT_HMAX)==0) return "";
return tchar_to_utf8(absPath);
#else
char resolved_name[PATH_MAX]; //
if(realpath(fn,resolved_name)==0) return "";
return string(resolved_name);
#endif
}
Вы можете установить mingw и затем просто выполнить configure примерно так:
$ export PATH=$PATH:/usr/local/i386-mingw32-4.3.0/bin $ ./configure --host=i386-mingw32
Алгоритм MD5 определён в RFC 1321: http://www.ietf.org/rfc/rfc1321.txt
Алгоритм SHA1 определён в FIPS 180-1: http://www.itl.nist.gov/fipspubs/fip180-1.htm
Алгоритм SHA256 определён в FIPS 180-2: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
Алгоритм Tiger определён на: http://www.cs.technion.ac.il/~biham/Reports/Tiger/
Алгоритм Whirlpool определён на: http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html