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

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

মধ্যম

নির্দেশনা

অ্যাফাইন সাইফারের একটি বাস্তবায়ন তৈরি করুন, যা মধ্যপ্রাচ্যে উদ্ভাবিত একটি প্রাচীন এনক্রিপশন পদ্ধতি।

অ্যাফাইন সাইফার হলো এক ধরনের মনোঅ্যালফাবেটিক সাবস্টিটিউশন সাইফার। প্রতিটি ক্যারেক্টারকে তার সাংখ্যিক সমতুল্যে ম্যাপ করা হয়, একটি গাণিতিক ফাংশন দিয়ে এনক্রিপ্ট করা হয়, আর তারপর তার নতুন সাংখ্যিক মানের সাথে সম্পর্কিত অক্ষরে রূপান্তর করা হয়। যদিও সব মনোঅ্যালফাবেটিক সাইফারই দুর্বল, তবু অ্যাফাইন সাইফার অ্যাটবাশ সাইফারের চেয়ে অনেক বেশি শক্তিশালী, কারণ এর কী-এর সংখ্যা অনেক বেশি।

এনক্রিপশন

এনক্রিপশন ফাংশনটি হলো:

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 সহমৌলিক নয়

মডুলার মাল্টিপ্লিকেটিভ ইনভার্স (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-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Scheme Exercism

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

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