MD5

MD5 একটি ক্রিপ্টোগ্রাফিক hash function । এটা যেকোনো লেন্থ এর ম্যাসেজ ইনপুট হিসেবে নেয় এবং এটাকে ১৬ বাইটের ফিক্সড ম্যাসেজ লেন্থের তৈরি করে । এটা ১২৮ বিটের এবং MD4 এর একটি পরবর্তীত ভার্সন । ১৯৯১ সালে রোনাল্ড রাইভেস্ট এটি প্রস্তাব করেন । 

এটাকে আমরা কয়েকটি ভাগে ভাগ করে ধাপে ধাপে বর্ণনা করব । 

Message Padding

আমরা আমাদের যেই ডাটা দেওয়া থাকবে সেটাকে এমন ভাবে বর্ধিত  করব যেন (Message length in Bit %512) = 448 হয় । 

Initialize MD Buffer

৩২ বিটের ৪ টি বাফার বিট নিব আমরা ধরি এদের নাম W,X,Y,Z 

    – W = 0x67425301

    – X = 0xEDFCBA45

    – Y = 0x98CBADFE

    – Z = 0x13DCE476

এখানে ৪ টা রাউন্ডে মোট ৬৪ টা অপারেশন করা হয় । প্রতিটা রাউন্ড এ ১৬ টি আলাদা অপারেশন চালানো হয় । এবং প্রতিটা রাউন্ড এ ভিন্ন ভিন্ন ফাংশন ব্যবহার করা হয় । নিচে এগুলো দেখানো হলো 

     – F1(X,Y,Z) = (X AND Y) OR (NOT X  AND Z)

     – F2(X,Y,Z) = (X AND Y) OR (Y AND NOT Z)

     – F3X,Y,Z) = X XOR Y XOR Z

     – F4(X,Y,Z) = Y XOR (X OR NOT Z)

এখন ইনপুট হিসেবে MD বাফার ইনিশিয়ালাইজ করা হবে, অর্থাৎ W,X,Y এবং Z। X এর আউটপুটটি Y এ পাঠানো হবে, Y এর আউটপুট Z এ পাঠানো করা হবে, এবং Z এর আউটপুট প্রধানত W এ পাঠানো  হবে। এই কাজগুলি করার পরে, আমরা W-এর আউটপুট খুঁজে বের করতে কিছু অপারেশন চালাব।

প্রথমে, X,Y, এবং Z এর আউটপুট গুলি নিব এবং তাদের উপর ফাংশন F1 চালাব। আমরা এই আউটপুটের সাথে W যোগ করবো এবং মডুলো 2^32 বিট যোগ করবো।

এরপর আমরা M[i] বিট মেসেজটি এর আগের আউটপুটের সাথে যোগ করবো।

তারপর, আমরা আউটপুটে 32 বিট কনস্ট্যান্ট যোগ করবো, অর্থাৎ K[i]।

সর্বশেষে, আমরা n (যেকোন মান হতে পারে) দিয়ে লেফট শিফট অপারেশন করবো এবং 2^32 দিয়ে মডুলো যোগ করবো।

সমস্ত পদক্ষেপ শেষে, J এর মান K তে পাঠানো হবে। একই প্রক্রিয়াগুলো F2,F3,F4 এর জন্যও ব্যবহৃত হবে। 64 টি সমস্ত অপারেশন পূর্ণ করার পর, আমরা আমাদের মেসেজ ডাইজেস্ট পেয়ে যাব।

পাইথন ল্যাংগুয়েজ এর জন্য আলাদা ভাবে বিল্ট ইন লাইব্রেরি আছে।আমরা কোনো ম্যাসেজ কে কোনো একটা হ্যাশ ফাংশন এ কনভার্ট করতে চাইলে পাইথন দিয়ে করতে পারব । 

        
           
import hashlib

def md5_hash(message):
    # Create an MD5 hash object
    md5 = hashlib.md5()

    # Update the hash object with the bytes-like object (message)
    md5.update(message.encode('utf-8'))

    # Get the hexadecimal representation of the digest
    hashed_message = md5.hexdigest()

    return hashed_message

# Example usage:
message = "Hello, MD5!"
hashed_message = md5_hash(message)
print(f"Original message: {message}")
print(f"MD5 hash: {hashed_message}")

        
    
Share on:

Category:

Leave a Reply

Your email address will not be published. Required fields are marked *

RECENT POST