বিবেচনা করুন আপনি একটি আছে হ্যাশ ফাংশন যা দৈর্ঘ্যের স্ট্রিং লাগে এবং আয় দৈর্ঘ্যের স্ট্রিং এবং সুন্দর সম্পত্তি এটি থাকে সংঘর্ষের প্রতিরোধী , অর্থাত্ এটা খুঁজে কঠিন দুটি ভিন্ন স্ট্রিং একই হ্যাশ সঙ্গে ।
আপনি এখন একটি নতুন হ্যাশ ফাংশন তৈরী করতে চাই যার স্ট্রিং লাগে নির্বিচারে দৈর্ঘ্য এবং তাদের দৈর্ঘ্য স্ট্রিং মানচিত্র , এখনও সংঘর্ষের প্রতিরোধী হচ্ছে।
আপনার জন্য ভাগ্যবান, ইতিমধ্যে 1979 সালে একটি পদ্ধতি বর্তমানে Merkle – Damgård নির্মাণ নামে পরিচিত প্রকাশিত হয়েছিল যা ঠিক এটি অর্জন করে।
এই চ্যালেঞ্জটির কাজটি হবে এই অ্যালগরিদমটি বাস্তবায়ন করা, সুতরাং আমরা প্রথমে একটি মেক্কেল-দামগার্ড নির্মাণের একটি আনুষ্ঠানিক বিবরণটি দেখতে পাব, ধাপে ধাপে উদাহরণের মধ্য দিয়ে যাওয়ার আগে যা দেখানো উচিত যে পদ্ধতির চেয়ে সহজতর এটি প্রথম প্রদর্শিত হতে পারে।
প্রদত্ত কিছু পূর্ণসংখ্যা , একটি হ্যাশ ফাংশন উপরে বর্ণিত এবং একটি ইনপুট স্ট্রিং হিসেবে নির্বিচারে দৈর্ঘ্যের, নতুন হ্যাশ ফাংশন নিম্নলিখিত আছে:
- সেট , দৈর্ঘ্য , এবং বিভক্ত দৈর্ঘ্যের অংশ , গত খণ্ড পূরণ trailing প্রয়োজনে শূন্য। এই ফলন অনেক অংশ যা।
- একটি নেতৃস্থানীয় এবং একটি trailing খণ্ড যুক্ত করো এবং , যেখানে গঠিত একটি স্ট্রিং zeros এবং হয় বাইনারি মধ্যে, সঙ্গে প্যাডেড নেতৃস্থানীয় দৈর্ঘ্যের শূন্য ।
- এখন iteratively এই আবেদন বর্তমান খণ্ড থেকে পূর্ববর্তী ফলাফল যোগ : , যেখানে । (নীচের উদাহরণটি দেখার পরে এই পদক্ষেপটি আরও স্পষ্ট হতে পারে))
- আউটপুট হ'ল চূড়ান্ত ফলাফল ।
কাজটি
একটি প্রোগ্রাম বা ফাংশন যা একটি ধনাত্মক পূর্ণসংখ্যা ইনপুট হিসাবে লাগে লিখুন , একটি হ্যাশ ফাংশন যেমন কালো বাক্স এবং একটি খালি স্ট্রিং এবং আয় একই ফলাফল হিসাবে একই ইনপুট উপর।
এটি কোড-গল্ফ , তাই প্রতিটি ভাষার সংক্ষিপ্ত উত্তর জিততে পারে।
উদাহরণ
ধরা যাক , সুতরাং আমাদের দেওয়া হ্যাশ ফাংশন 10 দৈর্ঘ্যের স্ট্রিং নেয় এবং 5 দৈর্ঘ্যের স্ট্রিং দেয়।
- এর একটি ইনপুট দেওয়া , আমরা নিম্নলিখিত অংশগুলি পেয়েছি : , , এবং । নোট করুন যে 4 পিছনে শূন্যের সাথে প্যাডিং করা দরকার।
- হ'ল পাঁচটি শূন্যের একটি স্ট্রিং এবং পাঁচটি বাইনারি ( ), দুটি শীর্ষস্থানীয় জিরো সহ প্যাড করা হয়।
- এখন খণ্ডগুলি :
একত্রিত হয়েছে 00000 প্রোগ্রাম " ) " আম্মিন " )
- আমাদের আউটপুট।
আসুন দেখে নেওয়া যাক এইচ আউটপুটটি এইচ এর জন্য কিছু পছন্দ 1 এর উপর নির্ভর করে কেমন দেখায় :
- যদি , অর্থাৎ প্রতি দ্বিতীয় অক্ষরটি ফিরে আসে, আমরা পাই:
সুতরাং যদি আউটপুট হওয়া দরকার যদি এই জাতীয় ব্ল্যাক বক্স ফাংশন হিসাবে দেওয়া হয়। - যদি কেবল তার ইনপুট প্রথম 5 অক্ষর ফেরৎ, আউটপুট হল । একইভাবে যদি শেষ 5 টি অক্ষর দেয় তবে আউটপুট ।
- যদি তার ইনপুটটির চরিত্রের কোডগুলি বাড়িয়ে তোলে এবং এই সংখ্যার প্রথম পাঁচটি সংখ্যা যেমন, , তবে ।
1 সরলতার জন্য, সেই আসলে না সংঘর্ষের প্রতিরোধী, যদিও এই আপনার জমা পরীক্ষার জন্য কোন ব্যাপার না হয়।
omgPzzles0
। ভাল নির্বাচিত উদাহরণ ইনপুট!