আন্ডারহ্যান্ডেড সি প্রতিযোগিতার চেতনায় আমি আন্ডারহ্যান্ডেড কোড প্রতিযোগিতা শুরু করছি। এই প্রতিযোগিতার উদ্দেশ্যটি হ'ল কিছু কোড সোজাসুজি প্রয়োগ করা, যখন এর ভিতরে একটি ঘৃণ্য বাগ লুকিয়ে রাখা হয় ly
প্রতিযোগীতা
আপনি আমেরিকান গুপ্তচর সংস্থার আইটি বিভাগে কর্মরত একটি গোপন রাশিয়ান তিল। আপনার আমেরিকান বস সবেমাত্র গোপন বার্তা এনক্রিপ্ট করার জন্য আপনাকে একটি পাসওয়ার্ড হ্যাশিং অ্যালগরিদম প্রয়োগ করতে বলেছে।
আপনার বস আপনাকে নিম্নলিখিত ফাংশনটি প্রয়োগ করতে চান:
f: String -> byte[16]
যা কোনও পাসওয়ার্ডকে একটি এএস কী হিসাবে ব্যবহারের জন্য উপযুক্ত 16-বাইট পরিমাণে রূপান্তর করে। আপনার বস একটি সুরক্ষিত ফাংশন চান, যার প্রসঙ্গে এই অর্থ হল যে বিভিন্ন পাসওয়ার্ড স্ট্রিং অপ্রতিরোধ্য সম্ভাবনার সাথে বিভিন্ন ফলাফল উত্পন্ন করতে পারে। উদাহরণস্বরূপ, ইনপুটটির এমডি 5 হ্যাশ ফিরিয়ে দেওয়া একটি সাধারণ বাস্তবায়ন হবে f
।
অবশ্যই, রাশিয়ান গুপ্তচর সংস্থায় আপনার আসল বস আপনাকে এই প্রক্রিয়াটি নষ্ট করতে চাইবে। আপনার কাজটি এমন বাস্তবায়ন করা f
যা রাশিয়ানরা ফিরে আসা কীগুলি ব্যবহার করে এনক্রিপ্ট করা সমস্ত গোপন বার্তা ডিক্রিপ্ট করতে পারে f
।
এটি করতে, আপনাকে অবশ্যই প্রয়োগ করতে হবে f
যাতে এটি কেবলমাত্র 2 ^ 128 এর সম্ভাব্য আউটপুটগুলির একটি ছোট উপসেটটি দেয়। বিশেষত, আপনার f
অবশ্যই সর্বোচ্চ 2 ^ 16 টি ভিন্ন ফলাফলের দিকে ফিরে আসতে হবে যাতে রাশিয়ানরা তাদের ডিক্রিপ্ট করতে ইচ্ছুক প্রতিটি এনক্রিপ্ট করা বার্তাটির সঠিক কীটির জন্য একটি সহজ ব্রুট-ফোর্স অনুসন্ধান করতে পারে।
তবে মনে রাখবেন যে গুপ্তচরবৃত্তি মৃত্যুদণ্ড বহন করে। যাতে ধরা না পড়ার জন্য, আপনার ফাংশনটিতে f
কমপক্ষে 2 ^ 8 টি ভিন্ন ফলাফল উত্পন্ন করা উচিত, যাতে কয়েকটি আউটপুটের কার্সারি পরীক্ষা f
করে কোনও সদৃশ প্রকাশের সম্ভাবনা থাকে। এবং সর্বাপেক্ষা গুরুত্বপূর্ণ, আপনি যে কোডটির পরিসীমা সীমাবদ্ধ করতে প্রবর্তন করেছেন তা f
অবশ্যই ইচ্ছাকৃত নয় tention আপনি যদি কখনও আদালতের ঘরে intoুকে পড়ে থাকেন তবে আপনারা ইচ্ছাকৃতভাবে বা দুর্ঘটনাক্রমে বাগটি প্রবর্তন করেছেন কিনা সে সম্পর্কে কিছুটা যুক্তিসঙ্গত সন্দেহ থাকতে হবে।
বিচার করা
আমি এবং অন্য দু'জনকে আমি নিয়োগ দিই এন্ট্রিগুলি বিচার করব (যদি আপনি বিচার করতে চান তবে আমাকে ইমেল করুন)। আমি বিজয়ী প্রবেশের জন্য 200 খ্যাতি অনুদান দিচ্ছি সাবমিশনগুলি মে মাসের মধ্যে আপলোড করতে হবে।
বিচার করা নিম্নলিখিত মানদণ্ডগুলিতে বিবেচনা করবে:
- অনুমানকে
f
মেনে চলে না, অর্থাত্ এটি 2 ^ 8 থেকে 2 ^ 16 সম্ভাব্য আউটপুটগুলির মধ্যে উত্পন্ন করে। এগুলি কঠোর সীমাবদ্ধ বলে মনে করবেন না, তবে আপনি খুব বেশি সীমা ছাড়িয়ে গেলে আমরা পয়েন্টগুলি কেটে নেব। - বাগটি সম্ভবত নির্বিচারে ভুলের ফল?
- আউটপুটগুলি
f
এলোমেলো দেখায়? - আপনার প্রয়োগ যত কম
f
হবে তত ভাল। - আপনার বাস্তবায়ন যত পরিষ্কার
f
হবে তত ভাল।
নোট
আপনি আপনার কোড প্রয়োগ করতে যে কোনও ভাষা ব্যবহার করতে পারেন। আপনি সরল দৃষ্টিতে একটি বাগটি আড়াল করার চেষ্টা করছেন, সুতরাং অবলম্বন কোডটি প্রস্তাবিত নয়।
আপনি যা কিছু ভাল জমা দেয় তার জন্য অনুভূতি পেতে পূর্ববর্তী আন্ডারহ্যান্ডেড সি প্রতিযোগিতার বিজয়ীদের কিছুটা একবার দেখে নিতে পারেন ।
ইনপুট স্ট্রিংগুলি মুদ্রণযোগ্য আসকি (32 থেকে 126, সমেত) হবে be আপনি চাইলে যুক্তিসঙ্গত সর্বোচ্চ দৈর্ঘ্য ধরে নিতে পারেন।