
Herramienta de hash multiplataforma para calcular resúmenes de mensajes (MD5, SHA-1, SHA-256, Tiger, Whirlpool) con capacidad de recorrido recursivo de directorios y auditoría de integridad de archivos.
Esto es md5deep, un conjunto de herramientas multiplataforma para calcular hashes, o resúmenes de mensajes, de cualquier número de archivos, opcionalmente explorando recursivamente la estructura de directorios. También puede tomar una lista de hashes conocidos y mostrar los nombres de archivo de los archivos de entrada cuyos hashes coinciden o no con alguno de los hashes conocidos. Esta versión soporta hashes MD5, SHA-1, SHA-256, Tiger y Whirlpool.
Consulte el archivo NEWS para obtener una lista de cambios entre versiones.
Consulte el archivo COPYING para obtener información sobre la licencia de este programa.
Consulte el archivo INSTALL para obtener instrucciones de compilación e instalación (genéricas). Aquí está la versión corta que debería funcionar en muchos casos:
sh bootstrap.sh # ejecuta autoconf, automake
./configure
make
make install
Tenga en cuenta que normalmente debe ser root para instalar en la ubicación predeterminada. El comando sudo es útil para ello. Puede especificar una ubicación de instalación alternativa usando la opción --prefix del script configure. Por ejemplo, para instalar en /home/foo/bin, use:
$ ./configure --prefix=/home/foo
Hay documentación completa sobre cómo usar el programa en la página principal del proyecto, https://github.com/jessek/hashdeep
La última versión es la 4.4. Estos son los hashes para las versiones Win32:
Por razones históricas, el programa tiene diferentes opciones y características cuando se ejecuta con los nombres "hashdeep" y "md5deep".
hashdeep tiene una función llamada "auditoría" que puede usar una lista de hashes conocidos para auditar un conjunto de ARCHIVOS. Los errores se reportan a la salida estándar de error. Si no se especifican ARCHIVOS, lee de la entrada estándar.
-a Modo de auditoría. Cada archivo de entrada se compara con el conjunto de conocidos. Se dice que una auditoría pasa si cada archivo de entrada coincide exactamente con un archivo en el conjunto de conocidos. Cualquier colisión, archivo nuevo o archivo faltante hará que la auditoría falle. Usar esta bandera sola produce un mensaje, ya sea "Auditoría pasada" o "Auditoría fallida".
-v = imprime el número de archivos en cada categoría
-v -v = imprime todas las discrepancias
-v -v -v = imprime los resultados para cada archivo examinado y cada archivo conocido.
-k <archivo> - La opción -k debe usarse para cargar el archivo de auditoría
Para realizar una auditoría:
hashdeep -r dir > /tmp/auditfile # Genera el archivo de auditoría
hashdeep -a -k /tmp/auditfile -r dir # prueba la auditoría
Observe que la auditoría se realiza con un archivo de salida hashdeep estándar. (Internamente, la auditoría se calcula como parte del proceso de hash.)
Los sistemas informáticos modernos basados en POSIX consideran los nombres de archivo como una secuencia de bytes que se representan según lo desee la aplicación. Esto significa que los nombres de archivo normalmente contienen ASCII pero pueden contener UTF-8, UTF-16, latin1 o incluso codificaciones Unicode no válidas.
Los sistemas basados en Windows tienen un conjunto de llamadas API para nombres de archivo basados en ASCII y otro conjunto para nombres de archivo codificados como UCS-2, que "produce un formato de longitud fija simplemente usando el punto de código como unidad de código de 16 bits y produce exactamente el mismo resultado que UTF-16 para 63.488 puntos de código en el rango 0-0xFFFF" según wikipedia. Pero wikipedia disputa la precisión fáctica de esta declaración en la página de discusión. Está bastante claro que nadie está completamente seguro de lo que Windows realmente hace, y Windows mismo puede no ser consistente.
La versión 3 de este programa abordó este problema usando la variable TCHAR para contener nombres de archivo en Windows y negándose a imprimirlos, imprimiendo un "?" en su lugar. La versión 4 de este programa traduce cadenas TCHAR a cadenas std::string en la primera oportunidad usando la función de Windows WideCharToMultiByte. Se han agregado banderas para escapar Unicode cuando se imprime.
No hay forma (aparentemente) en Windows de abrir un nombre de archivo UTF-8; debe convertirse de nuevo a un nombre de archivo multibyte con MultiByteToWideChar.
Afortunadamente, nunca necesitamos realmente convertir de vuelta.
Observe que en Windows, los archivos cuyo hash se calcula pueden tener caracteres Unicode, pero el archivo con los hashes debe tener un nombre ASCII.
COMPILANDO PARA WINDOWS:
-D_UNICODE hace que TCHAR se defina como 'wchar_t'.
COMPILANDO PARA POSIX:
-D_UNICODE no está definido, lo que hace que TCHAR se defina como 'char'.
Anteriormente, las funciones de win32 se controlaban con sentencias #ifdef, como esta:
#ifdef _WIN32
_wfullpath(d_name,fn,PATH_MAX);
#else
if (NULL == realpath(fn,d_name))
return TRUE;
#endif
También había un archivo llamado tchar-local.h que en realidad cambiaba la semántica de las funciones en diferentes plataformas, con cosas como esta:
#define _tcsncpy strncpy
#define _tstat_t struct stat
Esto hacía que el código fuera muy difícil de mantener.
Con la reescritura 4.0, hemos cambiado este código con funciones C++ que devuelven objetos cuando era posible y evitamos el uso de #defines, de modo que en sistemas _WIN32 la función realpath() se define antes de su uso, y el código principal carece de la función realpath(). Puede ver esto en cycles.cpp:
/* Devuelve la ruta absoluta canónica en UTF-8 en sistemas Windows y POSIX */
std::string get_realpath(const TCHAR *fn)
{
#ifdef _WIN32
/*
* expande una ruta relativa a la ruta completa.
* 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
}
Puede instalar mingw y luego simplemente configurar con algo como esto:
$ export PATH=$PATH:/usr/local/i386-mingw32-4.3.0/bin $ ./configure --host=i386-mingw32
El algoritmo MD5 está definido en RFC 1321: http://www.ietf.org/rfc/rfc1321.txt
El algoritmo SHA1 está definido en FIPS 180-1: http://www.itl.nist.gov/fipspubs/fip180-1.htm
El algoritmo SHA256 está definido en FIPS 180-2: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
El algoritmo Tiger está definido en: http://www.cs.technion.ac.il/~biham/Reports/Tiger/
El algoritmo Whirlpool está definido en: http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html