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

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

रेखीय बीजगणित पर आधारित हिल सिफर क्रिप्टोग्राफी में एक पॉलीग्राफिक प्रतिस्थापन सिफर है।

संदेश एन्क्रिप्ट करने के लिए: कुंजी स्ट्रिंग और संदेश स्ट्रिंग को मैट्रिक्स रूप के रूप में दर्शाया जाता है। फिर उन्हें मॉड्यूलो 26 के विरुद्ध गुणा किया जाता है। कुंजी मैट्रिक्स को संदेश को डिक्रिप्ट करने के लिए उलटा होना चाहिए।

संदेश को डिक्रिप्ट करने के लिए: एन्क्रिप्ट किए गए संदेश को डिक्रिप्ट संदेश प्राप्त करने के लिए मॉड्यूल 26 के विरुद्ध एन्क्रिप्शन के लिए उपयोग किए जाने वाले उलटा कुंजी मैट्रिक्स से गुणा किया जाता है।

उदाहरण के लिए

कुंजी मैट्रिक्स

1 0 1
2 4 0
3 5 6

संदेश स्ट्रिंग 'एबीसी' मैट्रिक्स रूप में -

0
1
2

एन्क्रिप्शन के लिए

ऊपर दिए गए दो आव्यूहों को गुणा करने पर हमें मिलता है,

2
4
17

कौन सा एन्क्रिप्टेड संदेश 'सीईआर' होगा

डिक्रिप्शन के लिए

कुंजी मैट्रिक्स का व्युत्क्रम है -

1.09091 0.227273 -0.181818
-0.545455 0.136364 0.0909091
-0.0909091 -0.227273 0.181818

अब एन्क्रिप्टेड संदेश मैट्रिक्स के साथ कुंजी मैट्रिक्स के व्युत्क्रम मैट्रिक्स को गुणा करने के बाद -

0
1
2

मूल संदेश स्ट्रिंग 'एबीसी' है।

यहाँ, उपरोक्त उदाहरण को लागू करने के लिए एक C++ प्रोग्राम है।

एल्गोरिदम

Begin
Function getKeyMatrix()
   For i = 0 to 2
      For j = 0 to 3
      Take the elements of matrix a[i][j] as input.
         m[i][j] = a[i][j]
      done
   done
   Take the message string as user input.
   For i = 0 to 2
      msg[i][0] = mes[i] - 65
   done
End
Begin
Function encrypt()
   For i = 0 to 2
      For j = 0 to 0
         For k = 0 to 2
            en[i][j] = en[i][j] + a[i][k] * msg[k][j]
   Take modulo 26 for each element of the matrix obtained by multiplication and print the encrypted message.
End
Begin
Function decrypt()
   Call function inversematrix()
   For i = 0 to 2
      For j = 0 to 0
         For k = 0 to 2
            de[i][j] = de[i][j] + b[i][k] * en[k][j]
Take modulo 26 of the multiplication to get the original message.

उदाहरण

#include<iostream>
#include<math.h>
using namespace std;
float en[3][1], de[3][1], a[3][3], b[3][3], msg[3][1], m[3][3];
void getKeyMatrix() { //get key and message from user
   int i, j;
   char mes[3];
   cout<<"Enter 3x3 matrix for key (should have inverse):\n";
   for(i = 0; i < 3; i++)
   for(j = 0; j < 3; j++) {
      cin>>a[i][j];
      m[i][j] = a[i][j];
   }
   cout<<"\nEnter a string of 3 letter(use A through Z): ";
   cin>>mes;
   for(i = 0; i < 3; i++)
   msg[i][0] = mes[i] - 65;
}
void encrypt() { //encrypts the message
   int i, j, k;
   for(i = 0; i < 3; i++)
   for(j = 0; j < 1; j++)
   for(k = 0; k < 3; k++)
   en[i][j] = en[i][j] + a[i][k] * msg[k][j];
   cout<<"\nEncrypted string is: ";
   for(i = 0; i < 3; i++)
   cout<<(char)(fmod(en[i][0], 26) + 65); //modulo 26 is taken for each element of the matrix obtained by multiplication
}
void inversematrix() { //find inverse of key matrix
   int i, j, k;
   float p, q;
   for(i = 0; i < 3; i++)
   for(j = 0; j < 3; j++) {
      if(i == j)
         b[i][j]=1;
      else
         b[i][j]=0;
   }
   for(k = 0; k < 3; k++) {
      for(i = 0; i < 3; i++) {
         p = m[i][k];
         q = m[k][k];
         for(j = 0; j < 3; j++) {
            if(i != k) {
               m[i][j] = m[i][j]*q - p*m[k][j];
               b[i][j] = b[i][j]*q - p*b[k][j];
            }
         }
      }
   }
   for(i = 0; i < 3; i++)
   for(j = 0; j < 3; j++)
   b[i][j] = b[i][j] / m[i][i];
   cout<<"\n\nInverse Matrix is:\n";
   for(i = 0; i < 3; i++) {
      for(j = 0; j < 3; j++)
      cout<<b[i][j]<<" ";
      cout<<"\n";
   }
}
void decrypt() { //decrypt the message
   int i, j, k;
   inversematrix();
   for(i = 0; i < 3; i++)
   for(j = 0; j < 1; j++)
   for(k = 0; k < 3; k++)
   de[i][j] = de[i][j] + b[i][k] * en[k][j];
   cout<<"\nDecrypted string is: ";
   for(i = 0; i < 3; i++)
   cout<<(char)(fmod(de[i][0], 26) + 65); //modulo 26 is taken to get the original message
   cout<<"\n";
}
int main() {
   getKeyMatrix();
   encrypt();
   decrypt();
}

आउटपुट

Enter 3x3 matrix for key (should have inverse):
1
0
1
2
4
0
3
5
6

Enter a string of 3 letter(use A through Z): ABC

Encrypted string is: CER

Inverse Matrix is:
1.09091 0.227273 -0.181818
-0.545455 0.136364 0.0909091
-0.0909091 -0.227273 0.181818

Decrypted string is: ABC

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

    यह एक मोनो-अल्फाबेटिक सिफर है जिसमें प्लेनटेक्स्ट के प्रत्येक अक्षर को सिफरटेक्स्ट बनाने के लिए दूसरे अक्षर द्वारा प्रतिस्थापित किया जाता है। यह प्रतिस्थापन सिफर योजना का सबसे सरल रूप है। इस क्रिप्टोसिस्टम को आमतौर पर शिफ्ट सिफर के रूप में जाना जाता है। अवधारणा प्रत्येक वर्णमाला को दूसरे वर्णमाला स

  1. AVL ट्री को लागू करने के लिए C++ प्रोग्राम

    AVL ट्री एक सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री है जहां सभी नोड्स के लिए बाएं और दाएं सबट्री की ऊंचाई के बीच का अंतर एक से अधिक नहीं हो सकता है। ट्री रोटेशन एक ऐसा ऑपरेशन है जो AVL ट्री पर तत्वों के क्रम में हस्तक्षेप किए बिना संरचना को बदलता है। यह पेड़ में एक नोड को ऊपर और एक नोड को नीचे ले जाता है।

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

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