
क्रॉस-प्लेटफ़ॉर्म हैशिंग टूलसेट जो संदेश डाइजेस्ट (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
ध्यान दें कि डिफ़ॉल्ट स्थान पर स्थापित करने के लिए आपको सामान्यतः रूट होना चाहिए। ऐसा करने के लिए sudo कमांड सहायक है। आप कॉन्फ़िगर स्क्रिप्ट के --prefix विकल्प का उपयोग करके एक वैकल्पिक स्थापना स्थान निर्दिष्ट कर सकते हैं। उदाहरण के लिए, /home/foo/bin पर स्थापित करने के लिए, उपयोग करें:
$ ./configure --prefix=/home/foo
प्रोग्राम का उपयोग करने के बारे में पूर्ण दस्तावेज़ प्रोजेक्ट के होमपेज पर है, https://github.com/jessek/hashdeep
नवीनतम रिलीज़ संस्करण 4.4 है। यहाँ Win32 संस्करणों के लिए हैश हैं:
ऐतिहासिक कारणों से, प्रोग्राम के अलग-अलग विकल्प और सुविधाएँ होती हैं जब इसे "hashdeep" और "md5deep" नामों से चलाया जाता है।
hashdeep में "audit" नामक एक सुविधा है जो ज्ञात हैश की एक सूची का उपयोग करके फ़ाइलों के एक सेट का ऑडिट कर सकती है। त्रुटियाँ मानक त्रुटि पर रिपोर्ट की जाती हैं। यदि कोई फ़ाइल निर्दिष्ट नहीं की गई है, तो मानक इनपुट से पढ़ता है।
-a ऑडिट मोड। प्रत्येक इनपुट फ़ाइल की तुलना ज्ञात के सेट के साथ की जाती है। ऑडिट को पास माना जाता है यदि प्रत्येक इनपुट फ़ाइल ज्ञात के सेट में ठीक एक फ़ाइल से मेल खाती है। कोई भी टकराव, नई फ़ाइलें, या लापता फ़ाइलें ऑडिट को विफल कर देंगी। केवल इस फ़्लैग का उपयोग करने से एक संदेश उत्पन्न होता है, या तो "Audit passed" या "Audit Failed"।
-v = प्रत्येक श्रेणी में फ़ाइलों की संख्या प्रिंट करता है
-v -v = सभी विसंगतियाँ प्रिंट करता है
-v -v -v = जाँची गई प्रत्येक फ़ाइल और प्रत्येक ज्ञात फ़ाइल के परिणाम प्रिंट करता है।
-k <file> - ऑडिट फ़ाइल लोड करने के लिए -k विकल्प का उपयोग किया जाना चाहिए
ऑडिट करने के लिए:
hashdeep -r dir > /tmp/auditfile # ऑडिट फ़ाइल उत्पन्न करें
hashdeep -a -k /tmp/auditfile -r dir # ऑडिट का परीक्षण करें
ध्यान दें कि ऑडिट एक मानक hashdeep आउटपुट फ़ाइल के साथ किया जाता है। (आंतरिक रूप से, ऑडिट हैशिंग प्रक्रिया के भाग के रूप में गणना की जाती है।)
POSIX-आधारित आधुनिक कंप्यूटर सिस्टम फ़ाइलनामों को बाइट्स का एक अनुक्रम मानते हैं जिन्हें एप्लिकेशन की इच्छानुसार प्रस्तुत किया जाता है। इसका मतलब है कि फ़ाइलनामों में आमतौर पर ASCII होता है लेकिन इसमें UTF-8, UTF-16, latin1, या अमान्य यूनिकोड कोडिंग भी हो सकती है।
विंडोज-आधारित सिस्टम में ASCII-आधारित फ़ाइलनामों के लिए API कॉल का एक सेट होता है और UCS-2 के रूप में एन्कोड किए गए फ़ाइलनामों के लिए दूसरा सेट होता है, जो "कोड बिंदु को 16-बिट कोड इकाई के रूप में उपयोग करके एक निश्चित-लंबाई प्रारूप उत्पन्न करता है और 0-0xFFFF रेंज में 63,488 कोड बिंदुओं के लिए UTF-16 के समान परिणाम उत्पन्न करता है" [wikipedia] (http://en.wikipedia.org/wiki/UTF-16/UCS-2) के अनुसार। लेकिन wikipedia वार्ता पृष्ठ पर इस कथन की तथ्यात्मक सटीकता पर विवाद करता है। यह बिल्कुल स्पष्ट है कि कोई भी पूरी तरह से निश्चित नहीं है कि Windows वास्तव में क्या करता है, और Windows स्वयं सुसंगत नहीं हो सकता है।
इस प्रोग्राम का संस्करण 3 ने विंडोज पर फ़ाइलनामों को रखने और उन्हें प्रिंट करने से मना करने के लिए TCHAR वेरिएबल का उपयोग करके इस समस्या का समाधान किया, इसके बजाय "?" प्रिंट किया। इस प्रोग्राम का संस्करण 4 [Windows फ़ंक्शन WideCharToMultiByte] (http://msdn.microsoft.com/en-us/library/dd374130%28v=vs.85%29.aspx) का उपयोग करके जल्द से जल्द TCHAR स्ट्रिंग्स को std::string स्ट्रिंग्स में अनुवाद करता है। यूनिकोड को प्रिंट करते समय बचने के लिए फ़्लैग जोड़े गए हैं।
Windows पर UTF-8 फ़ाइलनाम खोलने का कोई तरीका नहीं है (जाहिरा तौर पर); इसे MultiByteToWideChar के साथ वापस मल्टी-बाइट फ़ाइलनाम में परिवर्तित करने की आवश्यकता है।
सौभाग्य से, हमें कभी वापस परिवर्तित करने की आवश्यकता नहीं होती है।
ध्यान दें कि Windows पर हैश की गई फ़ाइलों में यूनिकोड वर्ण हो सकते हैं लेकिन हैश वाली फ़ाइल का नाम ASCII होना चाहिए।
विंडोज के लिए संकलन:
-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++ फ़ंक्शनों के साथ बदल दिया है जो ऑब्जेक्ट लौटाते हैं जहाँ संभव था और #defines के उपयोग से बचते हैं ताकि _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 स्थापित कर सकते हैं और फिर बस इस तरह कॉन्फ़िगर करें:
$ 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