অ্যাফাইন সাইফারের একটি ইমপ্লিমেন্টেশন তৈরি করুন। এটি মধ্যপ্রাচ্যে তৈরি হওয়া একটি প্রাচীন এনক্রিপশন সিস্টেম।
অ্যাফাইন সাইফার হলো একধরনের মনোঅ্যালফাবেটিক সাবস্টিটিউশন সাইফার। এতে প্রতিটি ক্যারেক্টারকে তার সংখ্যাগত সমতুল্যে ম্যাপ করা হয়, তারপর একটি গাণিতিক ফাংশন দিয়ে সেটি এনক্রিপ্ট করা হয় এবং শেষে তার নতুন সংখ্যাগত মানের সঙ্গে সম্পর্কিত অক্ষরে রূপান্তর করা হয়। সব মনোঅ্যালফাবেটিক সাইফারই দুর্বল, তবে অ্যাফাইন সাইফার Atbash সাইফারের চেয়ে অনেক বেশি শক্তিশালী, কারণ এতে অনেক বেশি কী থাকে।
এনক্রিপশন ফাংশনটি হলো:
E(x) = (ai + b) mod m
যেখানে:
i হলো অক্ষরটির ইনডেক্স, 0 থেকে বর্ণমালার দৈর্ঘ্য - 1 পর্যন্ত।m হলো বর্ণমালার দৈর্ঘ্য।
ল্যাটিন বর্ণমালার জন্য m হলো 26।a ও b হলো ইন্টিজার, যা মিলে এনক্রিপশন কী তৈরি করে।স্বয়ংক্রিয় ডিক্রিপশন সফল হওয়ার জন্য a ও m মানকে সহমৌলিক (ইংরেজিতে coprime; অথবা, আপেক্ষিকভাবে মৌলিক) হতে হবে, অর্থাৎ 1 ছাড়া তাদের আর কোনো সাধারণ গুণনীয়ক থাকবে না (আরও তথ্য সহমৌলিক ইন্টিজার নিয়ে উইকিপিডিয়া নিবন্ধে পাওয়া যাবে)।
যদি a ও m সহমৌলিক না হয়, তবে আপনার প্রোগ্রামের জানানো উচিত যে এটি একটি এরর।
অন্যথায় এটি প্রদত্ত কী দিয়ে এনক্রিপ্ট বা ডিক্রিপ্ট করবে।
এই অনুশীলনীর উদ্দেশ্যে, অঙ্কগুলো বৈধ ইনপুট, তবে সেগুলো এনক্রিপ্ট করা হয় না।
স্পেস ও যতিচিহ্ন বাদ দেওয়া হয়।
সাইফারটেক্সট নির্দিষ্ট দৈর্ঘ্যের দলে ভাগ করে লেখা হয়, দলগুলোর মাঝে স্পেস থাকে; ঐতিহ্যগতভাবে দলের আকার 5 অক্ষর।
এর ফলে শব্দের সীমানা দেখে এনক্রিপ্টেড লেখা অনুমান করা কঠিন হয়ে যায়।
ডিক্রিপশন ফাংশনটি হলো:
D(y) = (a^-1)(y - b) mod m
যেখানে:
y হলো একটি এনক্রিপ্টেড অক্ষরের সংখ্যাগত মান, অর্থাৎ y = E(x)
a^-1 হলো a mod m-এর মডুলার মাল্টিপ্লিকেটিভ ইনভার্স (MMI)a ও m সহমৌলিক হয়।a-এর MMI হলো সেই x, যেখানে ax-কে m দিয়ে ভাগ করলে ভাগশেষ হয় 1:
ax mod m = 1
মডুলার মাল্টিপ্লিকেটিভ ইনভার্স কীভাবে বের করতে হয় এবং এর অর্থ কী, সে সম্পর্কে আরও তথ্য সম্পর্কিত উইকিপিডিয়া নিবন্ধে পাওয়া যাবে।
a = 5, b = 7 কী দিয়ে "test" এনক্রিপ্ট করলে "ybty" পাওয়া যায়।a = 5, b = 7 কী দিয়ে "ybty" ডিক্রিপ্ট করলে "test" পাওয়া যায়।a = 11, b = 7 দিয়ে "ybty" ডিক্রিপ্ট করলে "lqul" পাওয়া যায়।a = 19, b = 13 কী দিয়ে "kqlfd jzvgy tpaet icdhm rtwly kqlon ubstx" ডিক্রিপ্ট করলে "thequickbrownfoxjumpsoverthelazydog" পাওয়া যায়।a = 18, b = 13 কী দিয়ে "test" এনক্রিপ্ট করা একটি এরর, কারণ 18 ও 26 সহমৌলিক নয়।a = 15-এর MMI খোঁজা:
(15 * x) mod 26 = 1(15 * 7) mod 26 = 1, অর্থাৎ 105 mod 26 = 1
7 হলো 15 mod 26-এর MMIExercism-এ সাইন আপ করুন, C++ ট্র্যাকের 19টি কনসেপ্ট100টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।