অ্যাফাইন সাইফারের একটি বাস্তবায়ন তৈরি করুন, যা মধ্যপ্রাচ্যে উদ্ভাবিত একটি প্রাচীন এনক্রিপশন পদ্ধতি।
অ্যাফাইন সাইফার হলো এক ধরনের মনোঅ্যালফাবেটিক সাবস্টিটিউশন সাইফার। প্রতিটি ক্যারেক্টারকে তার সাংখ্যিক সমতুল্যে ম্যাপ করা হয়, একটি গাণিতিক ফাংশন দিয়ে এনক্রিপ্ট করা হয়, আর তারপর তার নতুন সাংখ্যিক মানের সাথে সম্পর্কিত অক্ষরে রূপান্তর করা হয়। যদিও সব মনোঅ্যালফাবেটিক সাইফারই দুর্বল, তবু অ্যাফাইন সাইফার অ্যাটবাশ সাইফারের চেয়ে অনেক বেশি শক্তিশালী, কারণ এর কী-এর সংখ্যা অনেক বেশি।
এনক্রিপশন ফাংশনটি হলো:
E(x) = (ai + b) mod m
যেখানে:
i হলো অক্ষরটির সূচক, 0 থেকে বর্ণমালার দৈর্ঘ্য - ১ পর্যন্ত।m হলো বর্ণমালার দৈর্ঘ্য।
রোমান বর্ণমালার জন্য m হলো 26।a ও b হলো এমন ইন্টিজার, যা এনক্রিপশন কী তৈরি করে।স্বয়ংক্রিয় ডিক্রিপশন সফল হতে হলে a ও m-এর মান অবশ্যই সহমৌলিক (বা, আপেক্ষিকভাবে মৌলিক) হতে হবে, অর্থাৎ এদের একমাত্র সাধারণ গুণনীয়ক হলো সংখ্যা 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-এ সাইন আপ করুন, Scheme ট্র্যাকের 39টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।