
MD5, SHA-1, SHA-256, Tiger, Whirlpool 등 메시지 다이제스트를 계산하기 위한 크로스 플랫폼 해싱 도구 세트로, 재귀적 디렉토리 탐색 및 파일 무결성 감사 기능을 갖추고 있습니다.
이것은 md5deep으로, 여러 파일에 대한 해시 또는 메시지 다이제스트를 계산하고 선택적으로 디렉토리 구조를 재귀적으로 탐색하는 크로스 플랫폼 도구 모음입니다. 또한 알려진 해시 목록을 받아 입력 파일 중 해시가 알려진 해시와 일치하거나 일치하지 않는 파일의 파일명을 표시할 수 있습니다. 이 버전은 MD5, SHA-1, SHA-256, Tiger 및 Whirlpool 해시를 지원합니다.
릴리스 간 변경 사항 목록은 NEWS 파일을 참조하십시오.
이 프로그램의 라이선스 정보는 COPYING 파일을 참조하십시오.
(일반적인) 컴파일 및 설치 지침은 INSTALL 파일을 참조하십시오. 다음은 대부분의 경우에 작동하는 간단한 버전입니다:
sh bootstrap.sh # runs autoconf, automake
./configure
make
make install
기본 위치에 설치하려면 일반적으로 root 권한이 필요합니다. sudo 명령어가 유용합니다. configure 스크립트의 --prefix 옵션을 사용하여 다른 설치 위치를 지정할 수 있습니다. 예를 들어, /home/foo/bin에 설치하려면 다음을 사용하십시오:
$ ./configure --prefix=/home/foo
프로그램 사용 방법에 대한 완전한 문서는 프로젝트 홈페이지 https://github.com/jessek/hashdeep 에 있습니다.
최신 릴리스는 버전 4.4입니다. 다음은 Win32 버전의 해시입니다:
역사적인 이유로, 프로그램은 "hashdeep" 및 "md5deep" 이름으로 실행될 때 다른 옵션과 기능을 가집니다.
hashdeep에는 "audit"라는 기능이 있으며, 알려진 해시 목록을 사용하여 파일 집합을 감사할 수 있습니다. 오류는 표준 오류로 보고됩니다. 파일이 지정되지 않으면 표준 입력에서 읽습니다.
-a 감사 모드. 각 입력 파일은 알려진 파일 집합과 비교됩니다. 각 입력 파일이 알려진 파일 집합에서 정확히 하나의 파일과 일치하면 감사가 통과된 것으로 간주됩니다. 충돌, 새 파일 또는 누락된 파일이 있으면 감사가 실패합니다. 이 플래그만 사용하면 "감사 통과" 또는 "감사 실패" 메시지가 출력됩니다.
-v = 각 카테고리의 파일 수를 출력합니다.
-v -v = 모든 불일치를 출력합니다.
-v -v -v = 검사된 모든 파일과 알려진 모든 파일의 결과를 출력합니다.
-k <file> - 감사 파일을 로드하려면 -k 옵션을 사용해야 합니다.
감사를 수행하려면:
hashdeep -r dir > /tmp/auditfile # Generate the audit file
hashdeep -a -k /tmp/auditfile -r dir # test the audit
감사는 표준 hashdeep 출력 파일로 수행됩니다. (내부적으로 감사는 해싱 프로세스의 일부로 계산됩니다.)
POSIX 기반의 현대 컴퓨터 시스템은 파일 이름을 애플리케이션이 원하는 대로 렌더링되는 바이트 시퀀스로 간주합니다. 이는 파일 이름이 일반적으로 ASCII를 포함하지만 UTF-8, UTF-16, latin1 또는 심지어 잘못된 유니코드 인코딩을 포함할 수 있음을 의미합니다.
Windows 기반 시스템은 ASCII 기반 파일 이름을 위한 한 가지 API 호출 세트와 UCS-2로 인코딩된 파일 이름을 위한 다른 세트를 가지고 있습니다. 위키피디아에 따르면 UCS-2는 "코드 포인트를 16비트 코드 단위로 간단히 사용하여 고정 길이 형식을 생성하며, 범위 0-0xFFFF 내의 63,488개 코드 포인트에 대해 UTF-16과 정확히 동일한 결과를 생성합니다." 하지만 위키피디아는 토론 페이지에서 이 진술의 사실적 정확성에 대해 이의를 제기합니다. 아무도 Windows가 실제로 무엇을 하는지 완전히 확신하지 못하며, Windows 자체도 일관성이 없을 수 있다는 것은 꽤 명확합니다.
이 프로그램의 버전 3은 Windows에서 파일 이름을 저장하기 위해 TCHAR 변수를 사용하고 인쇄를 거부하며 대신 "?"를 인쇄하여 이 문제를 해결했습니다. 버전 4는 Windows 함수 WideCharToMultiByte를 사용하여 가능한 한 빨리 TCHAR 문자열을 std::string 문자열로 변환합니다. 인쇄할 때 유니코드를 이스케이프하는 플래그가 추가되었습니다.
Windows에서는 (분명히) UTF-8 파일 이름을 열 수 있는 방법이 없습니다. MultiByteToWideChar를 사용하여 다시 멀티바이트 파일 이름으로 변환해야 합니다.
다행히도, 우리는 실제로 다시 변환할 필요가 없습니다.
Windows에서는 해시된 파일이 유니코드 문자를 가질 수 있지만 해시가 포함된 파일은 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