امروز یکم بی حال و بی کار بودم گفتم یه چیزی بنویسم، یکم فک کردم چیزی جز همین موضوع MD5 به ذهنم نرسید.

خوب MD5 مخفف واژگان Message Digest 5 میباشد، که ترجمه فارسی اون میشه "خلاصه پیام 5". MD5 در واقع یک تابع پرکاربرد در هم آمیزی (Hash) در علم رمزنگاری است که توسط رونالد ریوست در سال 1991 طراحی شد. ایده پشت این الگوریتم این است که ورودی از نوع متن یا باینری با هر اندازه ای تبدیل به خروجی Hash موسوم به checksum با اندازه ثابت شود. یه مثال ساده از این الگوریتم رو در عکس زیر میبینید:

همینطوری که در عکــس بالا سرتون میبینید در این الگوریتم ورودی هرچی که باشه نهایتا تبدیل به یک مقدار Hash که در واقع یک مقدار Hex که تعداد ارقام اون 32 تا هست میشه، جلل خالق!


کاربرد MD5 چیست؟

فرض کنید که میخاین یه فایلی رو از طریق Email یا IRC یا Telegram یا الاغ یا هرچی دیگه بفرستین واسه دوستتون تقی. برای اینکه تقی اطمینان حاصل کنه که فایل دریافتی دستکاری نشده یا اینکه دچار نقص نشده باشه، اول خودتون فایل مذبور رو میریزین تو الگوریتم MD5 و از اونورش checksum که همون عدد 32 رقمی Hex هست رو دریافت میکنین و به اطلاع تقی میرسونین. اونگاه تقی هم وقتی فایل مذبور به دستش رسید دوباره اونو میریزه تو دستگاه MD5 (بند خدا فایل مذبور) و مقدار checksum خروجی اونو با مقداری که از شما دریافت کرده مقایسه میکنه، اگه دو تا مقدار با هم یکی بود ینی فایل دست نخورده مونده و مورد اعتماده.


داستان یک کاربرد!

برای اینکه بهتر به کاربرد این الگوریتم پی ببرین یکی از استفاده های اونو تو یکی از برنامه هایی که نوشته بودم در زمان قدیم براتون میگم. در گذشته برای یک شرکتی کار میکردم که نرم افزار های بانکی تولید میکرد و با چند بانک هم طرف حساب بود. ما تغریبا هر چند هفته یک بار مجبور بودیم یک ورژن جدید از تغییرات درخواستی بانک ها تولید کنیم، هر بانک بعد از تست و اعلام رضایت از کارکرد نرم افزار باید ورژن جدید رو در تمامی شعبات خودش پیاده سازی میکرد که یک عمل پر دردسر و پر خطا بود. نهایتا مجبور شدیم که عملیات دستی به روز کردن نرم افزار رو تبدیل به یک روند خود کار کنیم، یه چیزی مثل سیستم به روز رسانی Chrome. 

بعد از طراحی سیستم به روز رسانی خود کار و تست کردن اون تو سرور های خودمون به این نتیجه رسیدیم که وقتشه اونو توی سرورهای بانک بزاریم تا شعبات بتونن به صورت خودکار آخرین ورژن نرم افزار رود بگیرن و استفاده کنن، در ست زمانی که فکر میکردیم که همه چیز به درستی کار میکنه کارمندان شعبات شروع کردن به اعتراض که همه چیز از کار افتاده و هیچ چیز کار نمیکنه. پس از بسی بررسی متوجه شدیم که بعضی از شعبات بعد از اتمام عملیات دانلود، فایلی خراب شده رو دریافت کردن و این فایل قابل استفاده نبود. باز بعد از بسی بررسی متوجه شدیم کیفیت دسترسی بعضی از شعبات به سرور بانک پایین بود و در بعضی مواقع فایل های دریافتی با مشکل دریافت میشد. خوب راه حل چی بود، از کجا متوجه میشدیم که فایل دریافتی همون فایل موجود روی سرور هست. درسته باهوشا! MD5 checksum !!! 

ما به این نتیجه رسیدیم که در کنار package نرم افزاری که روی سرور قرار میدیم، یک فایل checksum هم از اون package تولید کنیم و روی سرور بزاریم، بعدا وقتی شعبه ای package جدید رو دریافت کرد، chcksum اونو تولید میکرد و با مقداری که روی سرور قرار داشت مقایسه میکرد، اگه مقداراشون فرق میکرد دوباره فایل جدید رو دانلود میکرد، و انقد این کار رو انجام میداد تا فابل رو مث آدم کامل دریافت میکرد. البته همه این مراحل بصورت خودکار انجام میشد!

خلاصه اینکه اصلا MD5 چیز خوبیه! بعـــــلـــــــه  قصه ما به سر رسید، MD5 به خونش نرسیــــــــــــــــد!