ট্র্যাক
/
Lean
Lean
/
অনুশীলনী
/
অ্যাফাইন সাইফার
অ্যাফাইন সাইফার

অ্যাফাইন সাইফার

মধ্যম

নির্দেশনা

অ্যাফাইন সাইফারের একটি ইমপ্লিমেন্টেশন তৈরি করুন। এটি মধ্যপ্রাচ্যে তৈরি হওয়া একটি প্রাচীন এনক্রিপশন সিস্টেম।

অ্যাফাইন সাইফার হলো একধরনের মনোঅ্যালফাবেটিক সাবস্টিটিউশন সাইফার। এতে প্রতিটি ক্যারেক্টারকে তার সংখ্যাগত সমতুল্যে ম্যাপ করা হয়, তারপর একটি গাণিতিক ফাংশন দিয়ে সেটি এনক্রিপ্ট করা হয় এবং শেষে তার নতুন সংখ্যাগত মানের সঙ্গে সম্পর্কিত অক্ষরে রূপান্তর করা হয়। সব মনোঅ্যালফাবেটিক সাইফারই দুর্বল, তবে অ্যাফাইন সাইফার 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 সহমৌলিক নয়।

মডুলার মাল্টিপ্লিকেটিভ ইনভার্স (MMI) খোঁজার উদাহরণ

a = 15-এর MMI খোঁজা:

  • (15 * x) mod 26 = 1
  • (15 * 7) mod 26 = 1, অর্থাৎ 105 mod 26 = 1
  • 7 হলো 15 mod 26-এর MMI

সূত্র

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

অ্যাফাইন সাইফার শুরু করতে প্রস্তুত?

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