تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

الگوریتم MD5 چیست؟ + نحوه عملکرد، کاربردها و مزایا در امنیت داده‌ها


۱۲ اردیبهشت ۱۴۰۴

الگوریتم MD5 هش (Hash) رمزنگاری شده است و هر پیامی با هر طولی که دریافت می‌کند، آن را به یک پیام با طول ثابت 16 بایت تبدیل می‌کند. نام این الگوریتم، مخفف (Message-Digest Algorithm) است که به معنای الگوریتم خلاصه سازی پیام می‌باشد. این الگوریتم در سال 1991 توسط رونالد ریویست طراحی شد و نسخه تصحیح یافته‌ای از الگوریتم MD4 به حساب می‌آید و با هدف افزایش امنیت انجام می‌شود. خروجی این الگوریتم همیشه 128 بیت است.

با اینکه MD5 دیگر برای کاربردهای امنیتی توصیه نمی‌شود، اما هنوز هم یکی از پر کاربرد ترین الگوریتم‌های هش (Hash) برای مقصد‌های رمز نگاری شده است، به عنوان مثال بررسی صحت و درستی اطلاعات (به عنوان چک سام) یا فشرده‌سازی فایل‌های بزرگ به روشی مطمئن است. برای شناخت بیشتر با لیارا همراه باشید.

همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راه‌اندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی ابری

آنچه در ادامه خواهید خواند:

  • الگوریتم رمز نگاری MD5 چیست؟
  • نحوه عملکرد الگوریتم MD5 به صورت مرحله به مرحله
  • پیاده‌سازی الگوریتم MD5
  • کاربردهای الگوریتم MD5
  • مزایای الگوریتم MD5
  • معایب الگوریتم MD5
  • جایگزین‌های MD5 در رمزنگاری
  • سوالات متداول
  • جمع بندی
الگوریتم MD5

الگوریتم رمز نگاری MD5 چیست؟

تابع یک‌طرفه یا تابع هش (Hash)، یک تابع ریاضی است که برای رمزگذاری اطلاعات استفاده می‌شود. این تابع معمولا برای تبدیل داده‌ها به یک رشته ثابت و با طول مشخص از آن استفاده می‌شود. مهم‌ترین ویژگی تابع یک‌طرفه این است که تنها امکان تبدیل داده‌ها به شکل رمزگذاری شده را به شما اجازه می‌دهد و هیچ‌گونه راه بازگشتی برای بازگرداندن داده‌ها به وضعیت اولیه (داده‌های اصلی) وجود ندارد. به عبارت دیگر، حتی اگر یک فایل یا متن بسیار بزرگی را وارد تابع کنید، خروجی آن همیشه به یک هش (Hash) ثابت و یکتا خواهد رسید. این ویژگی باعث می‌شود که تابع یک‌طرفه برای اهداف امنیتی مانند ذخیره‌سازی رمزعبور یا ایجاد امضاهای دیجیتال مفید باشد.

به علاوه، این تابع به صورتی طراحی شده است که حتی اگر داده ورودی تغییرات کوچکی داشته باشد، خروجی هش به روشی چشمگیر تغییر خواهد کرد. همچنین، استفاده از این تابع چندین بار با داده‌های مختلف همچنان خروجی‌های متفاوت و یکتایی تولید خواهد کرد.

با توجه به این ویژگی‌ها، از تابع هش (Hash) برای تأمین امنیت داده‌ها استفاده می‌شود، چرا که برای هکرها و مهاجمین، بازگرداندن داده‌ها از هش (Hash) تولید شده بسیار دشوار و عملاً غیرممکن است.

نصب و راه‌اندازی Kubernetes روی سرور فیزیکی (بدون مجازی‌سازی)
نصب و راه‌اندازی Kubernetes روی سرور فیزیکی

نحوه عملکرد الگوریتم MD5 به صورت مرحله به مرحله

عملکرد الگوریتم MD5 به صورت مرحله‌ به‌ مرحله انجام می‌شود. که در ادامه آن را برای شما به صورت کامل شرح داده‌ایم.

اضافه کردن بیت های پَد Padding

در این مرحله، به انتهای پیام اصلی، بیت هایی اضافه می‌شود تا طول کلی پیام، 64 بیت کمتر از مضرب کامل عدد 512 باشد. به عنوان مثال، اگر پیام اولیه 1000 بیت باشد، باید 472 بیت به آن اضافه شود تا طول نهایی پیام به 1472 بیت برسد. این عدد، 64 بیت کمتر از مضرب 3 از 512 است. (یعنی 1536 = 3 ×512)

نحوه‌ی عملکرد الگوریتم MD5 به صورت مرحله‌به‌مرحله انجام می‌شود. که در ادامه آن را با ذکر مثالی توضیح خواهیم داد.

فرمول کلی برای محاسبه‌ی طول پیام پس از اضافه‌ کردن بیت‌های پد به‌صورت زیر است:
طول (پیام اصلی + بیت‌های پد) = ‎512 × i‎ − ‎64‎
که در آن، ‎i‎ یک عدد صحیح مثبت است (مانند 1 , 2 , 3…).

اضافه کردن بیت های مربوط به طول پیام

در این مرحله، به خروجی مرحله اول، 64 بیت دیگر اضافه می‌شود که آن نشان دهنده طول پیام اولیه (قبل از پَد کردن) هستند. با این کار، طول کل پیام به مضربی کامل از 512 می‌رسد. به عبارت دیگر، اگر خروجی مرحله قبل برابر با ‎512 × n − 64 با افزودن این 64 بیت، طول نهایی پیام دقیقا برابر با ‎512 × n‎ خواهد شد.

output of first step = 512 * n - 64 
length bits = 64. 

مقدار دهی اولیه به بافر های MD

در این مرحله، چهار بافر (Buffer) با نام‌های A , B , C , D تعریف می‌شوند که هرکدام 32 بیت حجم دارند. این بافرها (Buffer) با مقادیر ثابت اولیه زیر مقداردهی می‌شوند.

   - A = 0x67425301
   - B = 0xEDFCBA45
   - C= 0x98CBADFE
   - D = 0x13DCE476
دورفرآیند P
اول(‌b و c‌) یا (‌نه b و d‌)
دوم(b و d) یا (c و نه d)
سومb یا c یا d
چهارمc یا (b یا نه d)

پردازش هر بلوک 512 بیتی

این مرحله، مهم‌ترین بخش الگوریتم MD5 به‌شمار می‌رود. در این قسمت، روی هر بلوک 512 بیتی، مجموعاً 64 عملیات در چهار دور انجام می‌شود.

در هر دور، 16 عملیات انجام می‌گیرد.

  • دور اول: 16 عملیات
  • دور دوم: 16 عملیات
  • دور سوم: 16 عملیات
  • دور چهارم: 16 عملیات

در هر یک از این دورها، یک تابع مشخص به کار گرفته می‌شود.

  • دور اول: تابع F
  • دور دوم: تابع G
  • دور سوم: تابع H
  • دور چهارم: تابع I

برای انجام این توابع، از عملیات منطقی مانند OR، AND، XOR و NOT استفاده کنید که همان دروازه‌های منطقی هستند. برای محاسبه‌ی این توابع، در هر مرحله از سه بافر B , C و D استفاده کنید.

بعد از اعمال تابع، حالا عملیات روی هر بلوک انجام می‌شود. برای انجام این عملیات موارد زیر را انجام دهید.

  • جمع به‌ صورت modulo 2³²
  • ‎M[i]‎: پیام 32 بیتی
  • ‎K[i]‎: مقدار ثابت 32 بیتی
  • ‎<<<n‎: شیفت به چپ به اندازه n بیت

در ابتدا، ورودی شامل بافرهای اولیه A , B , C , D است. خروجی B به C منتقل می‌شود، C وارد D می‌شود و D به J منتقل می‌شود. پس از این انتقال‌ها، عملیات لازم برای به‌دست آوردن خروجی A انجام می‌شود.

  • در گام اول، خروجی‌های B , C و D گرفته می‌شود و تابع F روی آن‌ها اعمال می‌شود. حاصل این تابع با A به‌صورت modulo 2³² جمع می‌شود.
  • در گام دوم، پیام ‎M[i]‎ به خروجی گام اول اضافه می‌شود.
  • در گام سوم، مقدار ثابت 32 بیتی ‎K[i]‎ به نتیجه‌ی مرحله قبل افزوده می‌شود.
  • در مرحله‌ی پایانی، عملیات شیفت به چپ به اندازه n بیت انجام شده و مجدداً جمع به‌صورت modulo 2³² انجام می‌گیرد.

بعد از طی تمامی مراحل، نتیجه‌ی A به B منتقل می‌شود. همین فرآیند برای توابع G , H و I نیز تکرار می‌شود. در پایان 64 عملیات، مقدار نهایی message digest تولید خواهد شد.

نحوه پشتیبان‌گیری از سرور LAMP با باکولا در اوبونتو 24.04
پشتیبان‌گیری از سرور LAMP با باکولا در اوبونتو

پیاده‌ سازی الگوریتم MD5

// importing the required libraries
#include <iostream>
#include <iomanip>
#include <openssl/md5.h>
#include <cstring>

// making a message
std::string inputstring = "This is a message sent by a computer user.";

// encoding the message using the library function
unsigned char digest[MD5_DIGEST_LENGTH];
MD5((unsigned char*)inputstring.c_str(), inputstring.length(), digest);

// printing the hash function
std::cout << "Hash of the input string:" << std::endl;
for(int i = 0; i < MD5_DIGEST_LENGTH; i++) {
    std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)digest[i];
}
std::cout << std::endl;

خروجی کد بالا به صورت زیر می‌باشد.


922547e866c89b8f677312df0ccec8ee
همین حالا، فایل‌های خودتون رو در فضایی سریع، پایدار و مقیاس‌پذیر ذخیره کنید.
✅ سازگار با Amazon S3 ✅ عملکرد بالا ✅۲.۵ گیگ فضای رایگان
خرید فضای ذخیره‌سازی ابری

کاربرد های الگوریتم MD5

الگوریتم MD5 به‌عنوان یک چک‌سام برای تأیید صحت فایل‌ها و داده‌ها استفاده می‌شود. این کار با مقایسه هش (Hash) فایل اصلی با فایل دریافتی انجام می‌شود تا بررسی شود که آیا فایل‌ها یا داده‌ها تغییر کرده‌اند یا خیر. برای امنیت داده‌ها و رمزنگاری از MD5 استفاده می‌شود، مانند رمزنگاری پسوورد (Password) کاربران در پایگاه‌داده‌ها و داده‌هایی که حساس نیستند. از MD5 در سیستم‌های کنترل نسخه برای مدیریت نسخه‌های مختلف فایل‌ها استفاده می‌شود.
این الگوریتم قبلاً در امضای دیجیتال و گواهینامه‌ها استفاده می‌شد، اما به دلیل آسیب‌پذیری‌های آن، با الگوریتم‌های امن‌تر مانند SHA-256 جایگزین شده است.

مفاهیم پایه‌ای OpenSSL: کار با گواهی‌های SSL، کلیدهای خصوصی و درخواست‌های امضای گواهی (CSRs)
پایه‌ای OpenSSL

مزایای الگوریتم MD5

الگوریتم MD5 روند سریعی دارد و درک آن بسیار ساده و قابل فهم می‌باشد. این الگوریتم یک گذرواژه قوی در فرمت 16 بایتی تولید می‌کند. تمامی توسعه‌دهندگان مانند توسعه‌دهندگان وب از الگوریتم MD5 برای تأمین امنیت گذرواژه‌های کاربران استفاده می‌کنند. برای پیاده‌سازی الگوریتم MD5 به حافظه نسبتاً کمتری نیاز است. تولید یک پیام هش (Hash) از پیام اصلی با این الگوریتم بسیار آسان و سریع است.

معایب الگوریتم MD5

الگوریتم MD5 برای ورودی‌های مختلف، هش (Hash) یکسانی تولید می‌کند. MD5 نسبت به SHA1 و SHA256 امنیت ضعیفی دارد. الگوریتم MD5 به‌عنوان یک الگوریتم ناامن شناخته شده است، بنابراین پیشنهاد لیارا به شما این است که به جای استفاده از الگوریتم MD5 از SHA256 استفاده کنید.

جایگزین‌ های MD5 در رمزنگاری

  • SHA-256 (الگوریتم هش امن 256 بیتی): این الگوریتم بخشی از خانواده SHA-2 است که یک مقدار هش 256 بیتی تولید می‌کند. این الگوریتم در بلاک‌چین، گواهی‌های SSL، امضاهای دیجیتال و گواهینامه‌ها استفاده می‌شود.
  • SHA-3: این الگوریتم به‌عنوان جایگزینی برای SHA-2 معرفی شده است و ساختار داخلی متفاوتی دارد که آن را در برابر برخی حملات مقاوم‌تر می‌کند. اگرچه SHA-2 همچنان رایج‌تر است، SHA-3 برای برنامه‌های امن که نیاز به بالاترین استانداردهای رمزنگاری دارند استفاده می‌شود.
  • RIPEMD-160: این الگوریتم یک مقدار هش 160 بیتی تولید می‌کند که امنیت بهتری نسبت به MD5 دارد، اما به اندازه SHA-2 گسترده نیست. این الگوریتم گاهی در امضاهای دیجیتال و گواهینامه‌ها در سیستم‌های امنیتی خاص استفاده می‌شود.
  • Whirlpool: یک تابع هش رمزنگاری است که برای امنیت بالا طراحی شده و خروجی هش 512 بیتی تولید می‌کند. این الگوریتم در مواردی که به امنیت بسیار قوی نیاز هست مورد استفاده قرار می‌گیرد.
حمله بروت فورس Brute Force چیست؟ راه های مقابله و پیشگیری از آن
حمله بروت فورس Brute Force

سوالات متداول

در ادامه به سوالاتی که امکان دارد در این زمینه برای شما بدون پاسخ بماند، جواب‌های کوتاه اما مفیدی داده‌ایم که با استفاده از آن می‌توانید به سوال خود پاسخ صحیحی را بدهید.

الگوریتم MD5 چیست؟

MD5 یک الگوریتم هش‌سازی است که داده‌ را به یک رشته 32 کاراکتری (هش 128 بیتی) تبدیل می‌کند.

آیا با MD5 می‌ توان داده را دوباره به حالت اول برگرداند؟

خیر، MD5 یک تابع یک‌طرفه است و قابل برگشت نیست.

آیا هش تولید شده توسط MD5 همیشه ثابت است؟

بله، اگر ورودی تغییری نکند، خروجی MD5 همیشه یک شکل خواهد بود.

از MD5 برای چه کارهایی استفاده می‌شود؟

برای بررسی صحت فایل، ذخیره امن رمز عبور و شناسایی تغییرات در داده‌ها استفاده می‌شود.

آیا MD5 امن است؟

نه به‌ طور کامل، به دلیل وجود برخورد هش (collision)، برای موارد بسیار حساس پیشنهاد نخواهیم کرد.

تفاوت MD5 با SHA-256 چیست؟

SHA-256 از نظر امنیتی بسیار قوی‌تر از MD5 است و هش 256 بیتی تولید می‌کند.

آیا هنوز هم از MD5 استفاده می‌شود؟

بله، ولی بیشتر برای بررسی صحت فایل (checksum) استفاده می‌شود، نه رمزنگاری حساس.

چه کسانی از MD5 استفاده می‌کنند؟

توسعه‌دهندگان نرم‌افزار، مدیران سیستم و طراحان وب برای اهداف عمومی امنیت داده‌هایشان از این الگوریتم استفاده می‌کنند..

چرا MD5 به‌ عنوان تابع یک‌ طرفه شناخته می‌شود؟

چون تنها می‌تواند داده را به هش تبدیل کند و بلاعکس این عمل را نمی‌تواند انجام دهد.

چطور می‌ توانم هش MD5 یک فایل یا متن را تولید کنم؟

با استفاده از ابزارهای آنلاین، نرم‌افزارهای خاص یا توابع کتابخانه‌ای در زبان‌های برنامه‌نویسی می‌توانید این کار را انجام دهید.

چطور می‌توان با استفاده از Redis سرعت پردازش سشن‌های برنامه Python/MySQL را در اوبونتو 22.04 افزایش داد؟
Redis برای سرعت پردازش سشن‌های برنامه Python/MySQL

جمع بندی

الگوریتم MD5 یکی از معروف ترین توابع هش سازی است که برای تبدیل داده‌ها به یک مقدار ثابت و یکتا از آن استفاده می‌شود. در این مقاله از لیارا، نحوه عملکرد MD5، مراحل اجرا، مزایا، معایب و کاربردهای رایج آن را به روشی ساده برای شما توضیح داده‌ایم. همچنین مقایسه‌ای کوتاه با الگوریتم‌های جایگزینی مانند SHA-256 این الگوریتم را بررسی کردیم تا دید بهتری را نسبت به انتخاب الگوریتم مناسبتان را داشته باشید.

به اشتراک بگذارید