You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
2.8 KiB
C++

5 years ago
/*
* C++ Program to Decode a Message Encoded Using Playfair Cipher
This C++ program decodes any message encoded using the technique of traditional playfair cipher. The Playfair cipher or Playfair square is a manual symmetric encryption technique and was the first literal digraph substitution cipher. Input is not case sensitive and works only for characters from a to z and A to Z.
*/
#include<iostream>
#include<vector>
using namespace std;
const char encoder[5][5] = {{'A','B','C','D','E'},
{'F','G','H','I','K'},
{'L','M','N','O','P'},
{'Q','R','S','T','U'},
{'V','W','X','Y','Z'}
};
void input_string(vector<char>& a)
{
char c;
while (1)
{
c=getchar();
if (c >= 97 && c <= 122)
c -= 32;
if (c == '\n')
break;
else if (c==' ')
continue;
else if (c == 'J')
a.push_back('I');
a.push_back(c);
}
return;
}
void get_pos(char p, int& r, int& c)
{
if (p < 'J')
{
r = (p - 65) / 5;
c = (p - 65) % 5;
}
else if (p > 'J')
{
r = (p - 66) / 5;
c = (p - 66) % 5;
}
return;
}
void same_row(int r, vector<char>& code, int c1, int c2)
{
code.push_back(encoder[r][(c1 + 4) % 5]);
code.push_back(encoder[r][(c2 + 4) % 5]);
return;
}
void same_column(int c, vector<char>& code, int r1, int r2)
{
code.push_back(encoder[(r1 + 4) % 5][c]);
code.push_back(encoder[(r2 + 4) % 5][c]);
return;
}
void diff_col_row(int r1, int c1, vector<char>& code, int r2, int c2)
{
code.push_back(encoder[r1][c2]);
code.push_back(encoder[r2][c1]);
return;
}
void encode(vector<char> msgx, int len)
{
vector<char> code;
int i = 0, j = 0;
int r1, c1, r2, c2;
while (i < len)
{
get_pos(msgx[i], r1, c1);
i++;
get_pos(msgx[i], r2, c2);
if (r1 == r2)
{
same_row(r1, code, c1, c2);
}
else if (c1 == c2)
{
same_column(c1, code, r1, r2);
}
else
{
diff_col_row(r1, c1, code, r2, c2);
}
i++;
}
cout<<"\nCODE: ";
for (j = 0; j < code.size(); j++)
{
if (code[j] == 'X')
continue;
cout<<code[j];
}
return;
}
int main()
{
vector<char> msg;
std::cout<<"Enter the Encrypted Message:";
input_string(msg);
int len=msg.size();
encode(msg,len);
return 0;
}
/*
Enter the Encrypted Message:CBNVMPPO
CODE: BALLOON