📄 playfair.cpp
字号:
#include <iostream>
#include <conio.h>
using namespace std;
int matrice[5][5];
void citire_matrice()
{
unsigned int i,j;
char c;
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
c=getch();
cout<<" "<<c;
matrice[i][j]=c-97;
}
cout<<endl;
}
}
class cuvinte
{
public:
unsigned int size;
int *mesaj;
cuvinte()
{
unsigned int i;
char c;
cout<<"Dati lungimea sirului "; cin>>size;
mesaj = new int[size];
cout<<"Tastati sirul"<<endl;
for (i=0;i<size;i++)
{
c=getch();
cout<<c;
mesaj[i]=c-97;
}
}
cuvinte(int x)
{
size = x;
mesaj = new int[size];
}
void afisare()
{
cout<<endl;
char c;
unsigned int i;
for (i=0;i<size;i++)
{
if (mesaj[i]<=25) c=mesaj[i]+97;
cout<<c;
}
getch();
}
~cuvinte()
{
}
};
void codare_playfair(cuvinte mesaj)
{
unsigned int i,j,k;
int x1,y1,x2,y2;
cuvinte codat(mesaj.size);
for (i=0;i<mesaj.size-1;i++)
{
if (mesaj.mesaj[i]==mesaj.mesaj[i+1])
{
mesaj.size++;
for (j=mesaj.size-1;j>=i+1;j--) mesaj.mesaj[j+1]=mesaj.mesaj[j];
mesaj.mesaj[i+1]=22; // am folosit ca litera de frecventa redusa w2
}
if (mesaj.mesaj[i]==16) mesaj.mesaj[i]=22;
}
if (mesaj.size%2!=0)
{
mesaj.size++;
mesaj.mesaj[mesaj.size-1]=22;
}
for (k=0;k<mesaj.size/2;k++)
{
for (i=0;i<5;i++)
for (j=0;j<5;j++)
{
if (mesaj.mesaj[2*k]==matrice[i][j]) { x1=i; y1=j;}
if (mesaj.mesaj[2*k+1]==matrice[i][j]) {x2=i; y2=j;}
}
if (x1==x2)
{
codat.mesaj[2*k]=matrice[x1][(y1+1)%5];
codat.mesaj[2*k+1]=matrice[x2][(y2+1)%5];
}
if (y1==y2)
{
if (x1==0) x1=5;
if (x2==0) x2=5;
codat.mesaj[2*k]=matrice[(x1-1)%5][y1];
codat.mesaj[2*k+1]=matrice[(x2-1)%5][y2];
}
if (x1!=x2&&y1!=y2)
{
codat.mesaj[2*k]=matrice[x1][y2];
codat.mesaj[2*k+1]=matrice[x2][y1];
}
}
codat.afisare();
}
void decodare_playfair(cuvinte mesaj)
{
unsigned int i,j,k;
int x1,x2,y1,y2;
cuvinte decodat(mesaj.size);
for (k=0;k<mesaj.size/2;k++)
{
for (i=0;i<5;i++)
for (j=0;j<5;j++)
{
if (mesaj.mesaj[2*k]==matrice[i][j]) { x1=i; y1=j;}
if (mesaj.mesaj[2*k+1]==matrice[i][j]) {x2=i; y2=j;}
}
if (x1==x2)
{
if (y1==0) y1=5;
if (y2==0) y2=5;
decodat.mesaj[2*k]=matrice[x1][(y1-1)%5];
decodat.mesaj[2*k+1]=matrice[x2][(y2-1)%5];
}
if (y1==y2)
{
decodat.mesaj[2*k]=matrice[(x1+1)%5][y1];
decodat.mesaj[2*k+1]=matrice[(x2+1)%5][y2];
}
if (x1!=x2&&y1!=y2)
{
decodat.mesaj[2*k]=matrice[x1][y2];
decodat.mesaj[2*k+1]=matrice[x2][y1];
}
}
decodat.afisare();
}
void main()
{
unsigned int i,j;
cout<<"Dati matricea cheie pt sistemul Playfair."<<endl<<"Daca nu contine w programu nu va functiona corect"<<endl;
citire_matrice();
cout<<"Dati mesajul de transmis fara spatii."<<endl<<"Programul nu va merge bine daca mesajul va avea spatii"<<endl;
cuvinte mesaj;
cout<<endl<<"1 pt codare 2 pt decodare"<<endl;
cin>>i;
if (i==1) codare_playfair(mesaj);
if (i==2) decodare_playfair(mesaj);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -