Playfair cipher: Difference between revisions
Content added Content deleted
No edit summary |
m (→{{header|C++}}) |
||
Line 8: | Line 8: | ||
=={{header|C++}}== |
=={{header|C++}}== |
||
<lang cpp> |
<lang cpp>#include <iostream> |
||
#include <iostream> |
|||
#include <string> |
#include <string> |
||
//-------------------------------------------------------------------------------------------------- |
|||
using namespace std; |
using namespace std; |
||
//-------------------------------------------------------------------------------------------------- |
|||
class playfair |
class playfair |
||
{ |
{ |
||
Line 30: | Line 27: | ||
{ |
{ |
||
int a, b, c, d; string ntxt; |
int a, b, c, d; string ntxt; |
||
for( string:: |
for( string::const_iterator ti = _txt.begin(); ti != _txt.end(); ti++ ) |
||
{ |
{ |
||
if( getCharPos |
if( getCharPos( *ti++, a, b ) ) |
||
if( getCharPos |
if( getCharPos( *ti, c, d ) ) |
||
{ |
{ |
||
if( a == c ) { ntxt |
if( a == c ) { ntxt += getChar( a, b + dir ); ntxt += getChar( c, d + dir ); } |
||
else if( b == d ){ ntxt |
else if( b == d ){ ntxt += getChar( a + dir, b ); ntxt += getChar( c + dir, d ); } |
||
else { ntxt |
else { ntxt += getChar( c, b ); ntxt += getChar( a, d ); } |
||
} |
} |
||
} |
} |
||
Line 49: | Line 46: | ||
while( si != _txt.end() ) |
while( si != _txt.end() ) |
||
{ |
{ |
||
cout << |
cout << *si; si++; cout << *si << " "; si++; |
||
if( ++cnt >= 26 ) cout << endl, cnt = 0; |
if( ++cnt >= 26 ) cout << endl, cnt = 0; |
||
} |
} |
||
Line 55: | Line 52: | ||
} |
} |
||
char |
char getChar( int a, int b ) |
||
{ |
{ |
||
⚫ | |||
if( a > 4 ) a = 0; if( b > 4 ) b = 0; |
|||
if( a < 0 ) a = 4; if( b < 0 ) b = 4; |
|||
⚫ | |||
} |
} |
||
Line 65: | Line 60: | ||
{ |
{ |
||
for( int y = 0; y < 5; y++ ) |
for( int y = 0; y < 5; y++ ) |
||
{ |
|||
int yy = 5 * y; |
|||
for( int x = 0; x < 5; x++ ) |
for( int x = 0; x < 5; x++ ) |
||
if( _m[x |
if( _m[y][x] == l ) |
||
{ a = x; b = y; return true; } |
{ a = x; b = y; return true; } |
||
} |
|||
return false; |
return false; |
||
} |
} |
||
Line 79: | Line 71: | ||
for( string::iterator si = t.begin(); si != t.end(); si++ ) |
for( string::iterator si = t.begin(); si != t.end(); si++ ) |
||
{ |
{ |
||
*si = toupper( *si ); if( *si < 65 || *si > 90 ) continue; |
|||
if |
if( *si == 'J' && ij ) *si = 'I'; |
||
else if |
else if( *si == 'Q' && !ij ) continue; |
||
_txt |
_txt += *si; |
||
} |
} |
||
if( e ) |
if( e ) |
||
Line 89: | Line 81: | ||
for( size_t x = 0; x < len; x += 2 ) |
for( size_t x = 0; x < len; x += 2 ) |
||
{ |
{ |
||
ntxt |
ntxt += _txt[x]; |
||
if( x + 1 < len ) |
if( x + 1 < len ) |
||
{ |
{ |
||
if( _txt[x] == _txt[x + 1] ) ntxt |
if( _txt[x] == _txt[x + 1] ) ntxt += 'X'; |
||
ntxt |
ntxt += _txt[x + 1]; |
||
} |
} |
||
} |
} |
||
_txt = ntxt; |
_txt = ntxt; |
||
} |
} |
||
if( _txt.length() & 1 ) _txt |
if( _txt.length() & 1 ) _txt += 'X'; |
||
} |
} |
||
Line 104: | Line 96: | ||
{ |
{ |
||
if( k.length() < 1 ) k = "KEYWORD"; |
if( k.length() < 1 ) k = "KEYWORD"; |
||
k |
k += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string nk = ""; |
||
for( string::iterator si = k.begin(); si != k.end(); si++ ) |
for( string::iterator si = k.begin(); si != k.end(); si++ ) |
||
{ |
{ |
||
*si = toupper( *si ); if( *si < 65 || *si > 90 ) continue; |
|||
if |
if( ( *si == 'J' && ij ) || ( *si == 'Q' && !ij ) )continue; |
||
if( nk.find |
if( nk.find( *si ) == -1 ) nk += *si; |
||
} |
} |
||
copy( nk.begin(), nk.end(), _m ); |
copy( nk.begin(), nk.end(), &_m[0][0] ); |
||
} |
} |
||
string _txt; char _m[ |
string _txt; char _m[5][5]; |
||
}; |
}; |
||
//-------------------------------------------------------------------------------------------------- |
|||
int main( int argc, char* argv[] ) |
int main( int argc, char* argv[] ) |
||
{ |
{ |
||
Line 125: | Line 117: | ||
cout << "Enter the text: "; getline( cin, txt ); |
cout << "Enter the text: "; getline( cin, txt ); |
||
playfair pf; pf.doIt( key, txt, ij, e ); return system( "pause" ); |
playfair pf; pf.doIt( key, txt, ij, e ); return system( "pause" ); |
||
⚫ | |||
} |
|||
//-------------------------------------------------------------------------------------------------- |
|||
⚫ | |||
{{out}}<pre> |
{{out}}<pre> |
||
(E)ncode or (D)ecode? e |
(E)ncode or (D)ecode? e |