md5sum - چک کردن تغییر در فایل‌ها

md5sum مخفف عبارت Message Digest 5 Summation است.

توضیحاتی در رابطه با الگوریتم MD5:

md5 که در اصل برای رمزنگاری از آن استفاده می‌شود، الگوریتمی است که رشته‌ای را به عنوان ورودی دریافت کرده و در نهایت یک عدد ۳۲ رقمی بر مبنای ۱۶ (۱۶ بایتی یا ۱۲۸ بیتی) تولید می‌کند. این عدد برای هر ورودی متفاوت، عددی متفاوت خواهد بود. البته احتمال این‌که ورودی‌های متفاوتی داد و خروجی یکسانی گرفت وجود دارد ولی بسیار کم است. بنابراین می‌توان از آن برای فهمیدن این‌که فایل‌ها به بدافزار آلوده شده‌اند یا خراب هستند استفاده کرد.

فرض کنید می‌خواهید فایلی را از یک سایت دانلود کنید. بعد از دانلود، از کجا می‌توان فهمید فایلی که دانلود شده، در بین راه توسط هکرها دستکاری نشده باشد؟ یا اصلا به علت مشکلات شبکه و یا pause و resume های متعدد، درست دانلود شده باشد؟ هیچ راهی وجود ندارد! در بهترین شرایط، اگر فایل از لحاظ ساختاری مشکل داشته باشد، در هنگام اجرای فایل، پیغام خطایی مبنی بر اینکه فایل دارای اشکال است، نمایش داده می‌شود. حال اگر سایت مذکور، md5 فایل مورد نظر را ذکر کرده باشد، می‌توان بعد از دانلود، با دستور md5sum این‌دو را با هم مقایسه نمود و در صورتی که برابر باشند به معنای اینست که فایل به درستی و بدون مشکل دانلود شده.

فرض کنید می‌خواهید فایل‌هایتان را در جایی مثلا یک هارد اکسترنال، به صورت بک آپ (backup) نگهداری کنید. بلافاصله بعد از بک آپ، اگر md5 فایل‌ها را حساب نموده و در یک فایل که دسترسی نوشتن را از آن گرفته‌اید (در صورت نیاز، دستور chmod دیده شود)، قرار دهید، بعدا می‌توان با محاسبه md5 آن فایل‌ها فهمید آیا فایل‌ها دچار بدافزار شده‌اند یا نه و اگر جواب مثبت است، کدام فایل‌ها؟

اطلاعات بیشتر در مورد این الگوریتم:  http://en.wikipedia.org/wiki/MD5

نمای کلی دستور md5sum به صورت زیر است:

$ md5sum [options] [file]

options: پارامترهای مورد نیاز دستور.

file: فایلی که می‌خواهیم md5 آن را محاسبه کنیم.

توضیح پارامترها:

b-یا binary--: فایل را در حالت باینری (دودوئی) می‌خواند.

c-یا check--: عدد md5 را از file می‌خواند و آن را با فایل مورد نظر مقایسه می‌کند.

t-یا text--: فایل را در حالت متنی می‌خواند (حالت پیشفرض).

quiet--: کلمه OK را برای هر کدام از فایلهایی که md5 آن منطبق بود نمایش نمی‌دهد.

warn--: اگر قالب یکی از خطوط اشتباه بود، پیغام خطایی نمایش می‌دهد.

مثال ۱. بدست آوردن md5 برای یک فایل

md5sum test.txt
3b85ec9ab2984b91070128be6aae25eb  test.txt

مثال ۲. اگر اسم فایل وارد نشود و یا به جای آن از - استفاده شود، اطلاعات را از ورودی می‌خواند

md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

مثال ۳. بدست آوردن md5 فایل‌ها و ریختن در یک فایل و مقایسه آن

md5sum *.txt
bbd166fee3f3f624286c4d85dc1994f8  test.txt
50dcf8c353827eef464cb79f55018d6c  Programs.txt
5d2a1217ddecff630528c64a04ee7f9e  list.txt

md5sum *.txt > t.md5

md5sum -c t.md5
test.txt: OK
Programs.txt: OK
list.txt: OK

توضیح مثال ۳:

در بخش اول، md5 همه فایل‌هایی که با txt به پایان رسیده‌اند را حساب می‌کند و نمایش می‌دهد.

در بخش دوم، md5 همان فایل‌ها را در فایلی به نام t.md5 قرار می‌دهد (از «علامت بزرگ‌تر» برای ریختن در فایل استفاده می‌شود، محتویات قبلی فایل پاک می‌شوند) در انتها، محتویات فایل t.md5 همان خروجی دستور در بخش یک خواهد بود.

در بخش سوم، برای همه فایل‌های موجود در فایل md5 را حساب می‌کند و با md5 موجود در فایل مقایسه می‌کند. کلمه OK نشانگر یکسان بودن آن‌دو است. اگر آن‌دو یکسان نبودند، از کلمه FAILED استفاده می‌کند.

md5sum -c t.md5
test.txt: OK
Programs.txt: FAILED
list.txt: OK
md5sum: WARNING: 1 of 3 computed checksums did NOT match