অ্যাফিন সাইফারে, একটি বর্ণমালার প্রতিটি অক্ষর তার সাংখ্যিক সমতুল্যের সাথে ম্যাপ করা হয়, এটি এক প্রকারের মনোঅ্যালফাবেটিক প্রতিস্থাপন সাইফার। এনক্রিপশন একটি সাধারণ গাণিতিক ফাংশন ব্যবহার করে করা হয় এবং আবার একটি অক্ষরে রূপান্তরিত হয়।
m আকারের একটি বর্ণমালার অক্ষর প্রথমে 0 … m-1 রেঞ্জের পূর্ণসংখ্যার সাথে ম্যাপ করা হয়, Affine সাইফারে,
Affine সাইফারের জন্য 'কী' 2টি সংখ্যা, a এবং b নিয়ে গঠিত। a নির্বাচন করা উচিত m থেকে তুলনামূলকভাবে প্রাইম হতে।
এনক্রিপশন
পূর্ণসংখ্যাকে রূপান্তর করতে, এটি মডুলার পাটিগণিত ব্যবহার করে যে প্রতিটি প্লেইনটেক্সট অক্ষর অন্য পূর্ণসংখ্যার সাথে মিলে যায় যা একটি সাইফার টেক্সট অক্ষরের সাথে মিলে যায়। একটি একক অক্ষরের জন্য এনক্রিপশন ফাংশন হল
E ( x ) = ( a x + b ) mod m modulus m: size of the alphabet a and b: key of the cipher.
ডিক্রিপশন
ডিক্রিপশনে, প্রতিটি সাইফার টেক্সট অক্ষরকে তাদের পূর্ণসংখ্যার মানগুলিতে রূপান্তর করুন। ডিক্রিপশন ফাংশন হল
D ( x ) = a^-1 ( x - b ) mod m a^-1 : modular multiplicative inverse of a modulo m. i.e., it satisfies the equation 1 = a^-1 mod m.কে সন্তুষ্ট করে
এই প্রক্রিয়াটি বাস্তবায়নের জন্য এখানে একটি C++ প্রোগ্রাম রয়েছে।
অ্যালগরিদম
Begin Function encryption(string m) for i = 0 to m.length()-1 if(m[i]!=' ') c = c + (char) ((((a * (m[i]-'A') ) + b) % 26) + 'A') else c += m[i] return c End Begin Function decryption(string c) Initialize a_inverse = 0 Initialize flag = 0 For i = 0 to 25 flag = (a * i) % 26 if (flag == 1) a_inverse = i done done For i = 0 to c.length() - 1 if(c[i]!=' ') m = m + (char) (((a_inverse * ((c[i]+'A' - b)) % 26)) + 'A') else m = m+ c[i] done End
উদাহরণ
#include<bits/stdc++.h> using namespace std; static int a = 7; static int b = 6; string encryption(string m) { //Cipher Text initially empty string c = ""; for (int i = 0; i < m.length(); i++) { // Avoid space to be encrypted if(m[i]!=' ') // added 'A' to bring it in range of ASCII alphabet [ 65-90 | A-Z ] c = c + (char) ((((a * (m[i]-'A') ) + b) % 26) + 'A'); else //else append space character c += m[i]; } return c; } string decryption(string c) { string m = ""; int a_inverse = 0; int flag = 0; //Find a^-1 (the multiplicative inverse of a //in the group of integers modulo m.) for (int i = 0; i < 26; i++) { flag = (a * i) % 26; //Check if (a * i) % 26 == 1, //then i will be the multiplicative inverse of a if (flag == 1) { a_inverse = i; } } for (int i = 0; i < c.length(); i++) { if(c[i] != ' ') // added 'A' to bring it in range of ASCII alphabet [ 65-90 | A-Z ] m = m + (char) (((a_inverse * ((c[i]+'A' - b)) % 26)) + 'A'); else //else append space character m += c[i]; } return m; } int main(void) { string msg = "TUTORIALSPOINT"; string c = encryption(msg); cout << "Encrypted Message is : " << c<<endl; cout << "Decrypted Message is: " << decryption(c); return 0; }
আউটপুট
Encrypted Message is : JQJAVKGFCHAKTJ Decrypted Message is: TUTORIALSPOINT