
مجموعة أدوات تجزئة متعددة المنصات لحساب ملخصات الرسائل (MD5، SHA-1، SHA-256، Tiger، Whirlpool) مع إمكانية اجتياز الدليل بشكل متكرر وتدقيق سلامة الملفات.
هذه هي md5deep، مجموعة من الأدوات عبر الأنظمة الأساسية لحساب التجزئات (hashes)، أو ملخصات الرسائل، لأي عدد من الملفات مع إمكانية الحفر التكراري عبر بنية الدليل. يمكنها أيضًا أخذ قائمة من التجزئات المعروفة وعرض أسماء ملفات الإدخال التي تتطابق تجزئاتها أو لا تتطابق مع أي من التجزئات المعروفة. يدعم هذا الإصدار تجزئات MD5 وSHA-1 وSHA-256 وTiger وWhirlpool.
انظر إلى الملف NEWS للحصول على قائمة بالتغييرات بين الإصدارات.
انظر إلى الملف COPYING للحصول على معلومات حول ترخيص هذا البرنامج.
انظر إلى الملف INSTALL للحصول على تعليمات التجميع والتركيب (العامة). إليك النسخة المختصرة التي يجب أن تعمل في معظم الحالات:
sh bootstrap.sh # runs 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 على ميزة تسمى "audit" يمكنها استخدام قائمة من التجزئات المعروفة لتدقيق مجموعة من الملفات. يتم الإبلاغ عن الأخطاء إلى الخطأ القياسي (standard error). إذا لم يتم تحديد أي ملفات، فإنه يقرأ من الإدخال القياسي (standard input).
-a وضع التدقيق (Audit mode). تتم مقارنة كل ملف إدخال مع مجموعة التجزئات المعروفة. يُقال إن التدقيق ينجح إذا تم تطابق كل ملف إدخال مع ملف واحد بالضبط من مجموعة التجزئات المعروفة. أي تعارضات أو ملفات جديدة أو ملفات مفقودة ستؤدي إلى فشل التدقيق. استخدام هذا العلم بمفرده ينتج رسالة، إما "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" وفقًا لـ [wikipedia] (http://en.wikipedia.org/wiki/UTF-16/UCS-2). لكن ويكيبيديا تنازع الدقة الواقعية لهذه العبارة في صفحة النقاش. من الواضح جدًا أنه لا أحد متأكد تمامًا مما يفعله Windows بالفعل، وقد لا يكون Windows نفسه متسقًا.
عالج الإصدار 3 من هذا البرنامج هذه المشكلة باستخدام متغير TCHAR لتخزين أسماء الملفات على Windows ورفض طباعتها، مطبوعًا "?" بدلاً من ذلك. الإصدار 4 من هذا البرنامج يحول سلاسل TCHAR إلى سلاسل std::string في أقرب فرصة باستخدام [وظيفة Windows WideCharToMultiByte] (http://msdn.microsoft.com/en-us/library/dd374130%28v=vs.85%29.aspx). تمت إضافة علامات للهروب من 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++ التي تُرجع الكائنات حيثما كان ذلك ممكنًا وتجنب استخدام #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