সরল সাইফার

সরল সাইফার

কঠিন

নির্দেশনা

ভিজেনেয়ার সাইফার-এর একটি ইমপ্লিমেন্টেশন তৈরি করুন। ভিজেনেয়ার সাইফার একটি সরল সাবস্টিটিউশন সাইফার।

সাইফারের পরিভাষা

সাইফার হলো একটি অ্যালগরিদম, যা একটি স্ট্রিং এনক্রিপ্ট বা এনকোড করতে ব্যবহৃত হয়। এনক্রিপ্ট না করা স্ট্রিংটিকে বলা হয় প্লেইনটেক্সট এবং এনক্রিপ্ট করা স্ট্রিংটিকে বলা হয় সাইফারটেক্সট। প্লেইনটেক্সটকে সাইফারটেক্সটে রূপান্তর করাকে বলা হয় এনকোডিং, আর এর উল্টো কাজটিকে বলা হয় ডিকোডিং।

একটি সাবস্টিটিউশন সাইফারে প্লেইনটেক্সটের প্রতিটি অক্ষরকে একটি সাইফারটেক্সট অক্ষর দিয়ে প্রতিস্থাপন করা হয়, যা একটি কী-এর সাহায্যে হিসাব করা হয়। (লক্ষ করুন, প্রতিস্থাপিত অক্ষরটি মূল অক্ষরের মতোই হতে পারে।)

এনকোডিংয়ের বিস্তারিত

এই সাইফারে কী হলো ছোট হাতের অক্ষরের একটি ক্রম, যেমন "abcd"। প্লেইনটেক্সটের প্রতিটি অক্ষরকে কী-এর সংশ্লিষ্ট একটি অক্ষরের ভিত্তিতে নির্দিষ্ট দূরত্বে শিফট বা রোটেট করা হয়। কী-তে একটি "a" মানে ০ শিফট (অর্থাৎ কোনো শিফট নেই)। কী-তে একটি "b" মানে ১ শিফট। কী-তে একটি "c" মানে ২ শিফট, এবং এভাবে চলতে থাকে।

প্লেইনটেক্সটের প্রথম অক্ষরটি কী-এর প্রথম অক্ষর ব্যবহার করে, প্লেইনটেক্সটের দ্বিতীয় অক্ষরটি কী-এর দ্বিতীয় অক্ষর ব্যবহার করে, এভাবে চলতে থাকে। প্লেইনটেক্সটের অক্ষর শেষ হওয়ার আগেই যদি কী-এর অক্ষর শেষ হয়ে যায়, তাহলে কী-এর শুরু থেকে আবার শুরু করুন।

কী-তে যদি একটিমাত্র অক্ষর থাকে, যেমন "dddddd", তাহলে প্লেইনটেক্সটের সব অক্ষর একই পরিমাণে (এই উদাহরণে তিন) শিফট হয়, যা এটিকে রোটেশনাল সাইফার বা শিফট সাইফারের (যাকে মাঝে মাঝে সিজার সাইফারও বলা হয়) সমান করে তোলে। উদাহরণস্বরূপ, প্লেইনটেক্সট "iamapandabear" হয়ে যাবে "ldpdsdqgdehdu"।

কী-তে যদি শুধু "a" অক্ষরটি থাকে (একবার বা একাধিকবার), তাহলে শিফটের দূরত্ব শূন্য এবং সাইফারটেক্সট প্লেইনটেক্সটের মতোই থাকে।

তবে সাধারণত কী এর চেয়ে অনেক বেশি জটিল হয়! কী যদি "abcd" হয়, তাহলে প্লেইনটেক্সটের অক্ষরগুলো ০, ১, ২ আর ৩ দূরত্বে শিফট হবে। প্লেইনটেক্সট যদি "hello" হয়, তাহলে আমাদের ৫টি শিফট দরকার, তাই কী আবার ঘুরে শুরুতে ফিরে যাবে এবং শিফটের দূরত্ব হবে ০, ১, ২, ৩ আর ০। "hello"-এর অক্ষরগুলোতে ওই শিফটগুলো প্রয়োগ করলে আমরা পাই "hfnoo"।

র্যান্ডম কী

কোনো কী দেওয়া না থাকলে, লাতিন বর্ণমালার অন্তত ১০০টি র্যান্ডম ছোট হাতের অক্ষর নিয়ে একটি কী তৈরি করুন।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Java Exercism

সরল সাইফার শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।