Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ प्रोग्राम एफ़िन सिफर को लागू करने के लिए

एफ़िन सिफर में, वर्णमाला के प्रत्येक अक्षर को उसके संख्यात्मक समकक्ष के लिए मैप किया जाता है, यह एक प्रकार का मोनोअल्फाबेटिक प्रतिस्थापन सिफर है। एन्क्रिप्शन एक साधारण गणितीय फ़ंक्शन का उपयोग करके किया जाता है और इसे वापस एक अक्षर में बदल दिया जाता है।

आकार एम के वर्णमाला के अक्षरों को पहले एफ़िन सिफर में 0 … एम -1 श्रेणी में पूर्णांक में मैप किया जाता है,

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

  1. STL में Set_Symmetric_difference को लागू करने के लिए C++ प्रोग्राम

    यह सेट_सिमेट्रिक_डिफरेंस को लागू करने के लिए एक सी ++ प्रोग्राम है। दो सेटों का सममित अंतर उन तत्वों द्वारा निर्मित होता है जो एक सेट में मौजूद होते हैं, लेकिन दूसरे में नहीं। सामान्य सेट ऑपरेशन हैं - संघ सेट करें चौराहे सेट करें सममित सेट अंतर या अनन्य-या अंतर या घटाव सेट करें एल्गोरिदम Begin

  1. सी ++ प्रोग्राम एडजेंसी मैट्रिक्स को लागू करने के लिए

    एक ग्राफ का आसन्न मैट्रिक्स आकार V x V का एक वर्ग मैट्रिक्स है। V ग्राफ G के शीर्षों की संख्या है। इस मैट्रिक्स में प्रत्येक पक्ष में V कोने चिह्नित हैं। यदि ग्राफ़ में i से j कोने तक कुछ किनारे हैं, तो ith पर आसन्न मैट्रिक्स में पंक्ति और जम्मूवें कॉलम में यह 1 (या भारित ग्राफ़ के लिए कुछ गैर-शून्

  1. सी++ प्रोग्राम एडजेंसी लिस्ट को लागू करने के लिए

    एक ग्राफ की आसन्न सूची प्रतिनिधित्व लिंक्ड सूची प्रतिनिधित्व है। इस निरूपण में हमारे पास सूचियों की एक सरणी है सरणी का आकार V है। यहाँ V शीर्षों की संख्या है। दूसरे शब्दों में, हम कह सकते हैं कि हमारे पास विभिन्न सूचियों के V नंबर को संग्रहीत करने के लिए एक सरणी है। यदि कोई सूची शीर्षलेख u वर्टेक्स