int licznik, licznik_wpisany, mnoznik, wartosc, wartosc_ASCII, licznik_bit;
char txt[ 16 ];
int licznik_bin[ 8 ];
int wektor[ 8 ] = { 0, 1, 0, 1, 0, 1, 0, 1 };
int txt_bin[ 255 ];
void szyfruj( char plik_we[], char plik_wy[], int licznik, int licznik_wpisany, int mnoznik, int wartosc, int wartosc_ASCII, int licznik_bit, char txt[], int wektor[], int txt_bin[], int licznik_bin[] )
{
cout << "Podaj licznik do szyfrowania (0-255): " << endl;
cin >> licznik_wpisany;
if( licznik < 0 and licznik > 255 )
{
cout << "Podales niedozwolony licznik" << endl;
}
else
cout << "Podaj nazwe pliku do zaszyfrowania: " << endl;
cin >> plik_we;
cout << "Podaj nazwe pliku do zapisu: " << endl;
cin >> plik_wy;
ifstream plikIn( plik_we );
if( !plikIn )
{
cout << "Plik do zaszyfrowania nie zostal otwarty" << endl;
system( "PAUSE" );
}
ofstream plikOut( plik_wy );
if( !plikOut )
{
cout << "Plik do zapisu nie zostal otwarty" << endl;
for( int i = 7; i >= 0; i-- ) //xor z wektorem 0xAA
{
if( txt_bin[ i ] == wektor[ i ] )
txt_bin[ i ] = 0;
else
txt_bin[ i ] = 1;
}
licznik = licznik_wpisany; // zamiana licznika na binarny
licznik_bit = 0;
do
{
for( int j = 0; j < 8; j++ )
{
licznik_bin[ j ] = licznik % 2;
licznik /= 2;
licznik_bit++;
}
} while( licznik_bit < 8 );
for( int i = 7; i >= 0; i-- ) // xor z licznikiem
{
if( txt_bin[ i ] == licznik_bin[ i ] )
txt_bin[ i ] = 0;
else
txt_bin[ i ] = 1;
}
mnoznik = 0; //zamiana na ASCII
wartosc = 1;
wartosc_ASCII = 0;
for( int i = 0; i < 8; i++ )
{
if( txt_bin[ i ] == 1 )
wartosc_ASCII = wartosc_ASCII + wartosc;
mnoznik++;
wartosc = wartosc * 2;
}
plikOut << static_cast < char >( wartosc_ASCII );
for( int i = 7; i >= 0; i-- ) //przypisanie wyniku do wektora
wektor[ i ] = txt_bin[ i ];
if( licznik_wpisany == 255 )
licznik_wpisany = 0;
else
licznik_wpisany++;
}
}
plikIn.close();
plikOut.close();
}
void odszyfruj( char plik_we[], char plik_wy[], int licznik, int licznik_wpisany, int mnoznik, int wartosc, int wartosc_ASCII, int licznik_bit, char txt[], int wektor[], int txt_bin[], int licznik_bin[] )
{
cout << "Podaj licznik do odszyfrowania (0-255): " << endl;
cin >> licznik;
if( licznik < 0 and licznik > 255 )
{
cout << "Podales niedozwolony licznik" << endl;
}
else
cout << "Podaj nazwe pliku do odszyfrowania: " << endl;
cin >> plik_we;
cout << "Podaj nazwe pliku do zapisu: " << endl;
cin >> plik_wy;
ifstream plikIn( plik_we );
if( !plikIn )
{
cout << "Plik do odszyfrowania nie zostal otwarty" << endl;
system( "PAUSE" );
}
ofstream plikOut( plik_wy );
if( !plikOut )
{
cout << "Plik do zapisu nie zostal otwarty" << endl;
system( "PAUSE" );
}
while( plikIn )
{
plikIn.read( static_cast < char *>( txt ), 16 );
int len = plikIn.gcount();
if( len == 0 ) break;
for( int i = 0; i < len; i++ )
{
plikIn >> txt[ i ];
cout << static_cast < int >( txt[ i ] ) << endl;
}
for( int i = 0; i < len; i++ )
{
int licznik_bit = 0;
do
{
for( int j = 0; j < 8; j++ )
{
txt_bin[ j ] = txt[ i ] % 2 + 1; //zamiana znaku na binarny
Odpowiedź:
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
char plik_we[ 50 ], plik_wy[ 50 ];
int licznik, licznik_wpisany, mnoznik, wartosc, wartosc_ASCII, licznik_bit;
char txt[ 16 ];
int licznik_bin[ 8 ];
int wektor[ 8 ] = { 0, 1, 0, 1, 0, 1, 0, 1 };
int txt_bin[ 255 ];
void szyfruj( char plik_we[], char plik_wy[], int licznik, int licznik_wpisany, int mnoznik, int wartosc, int wartosc_ASCII, int licznik_bit, char txt[], int wektor[], int txt_bin[], int licznik_bin[] )
{
cout << "Podaj licznik do szyfrowania (0-255): " << endl;
cin >> licznik_wpisany;
if( licznik < 0 and licznik > 255 )
{
cout << "Podales niedozwolony licznik" << endl;
}
else
cout << "Podaj nazwe pliku do zaszyfrowania: " << endl;
cin >> plik_we;
cout << "Podaj nazwe pliku do zapisu: " << endl;
cin >> plik_wy;
ifstream plikIn( plik_we );
if( !plikIn )
{
cout << "Plik do zaszyfrowania nie zostal otwarty" << endl;
system( "PAUSE" );
}
ofstream plikOut( plik_wy );
if( !plikOut )
{
cout << "Plik do zapisu nie zostal otwarty" << endl;
system( "PAUSE" );
}
while( plikIn )
{
plikIn.read( reinterpret_cast < char *>( txt ), 16 );
int len = plikIn.gcount();
if( len == 0 ) break;
for( int i = 0; i < len; i++ )
{
plikIn >> txt[ i ];
}
for( int i = 0; i < len; i++ )
{
licznik_bit = 0;
do //zamiana znaku na binarny
{
for( int j = 0; j < 8; j++ )
{
txt_bin[ j ] = txt[ i ] % 2;
txt[ i ] /= 2;
licznik_bit++;
}
} while( licznik_bit < 8 );
for( int i = 7; i >= 0; i-- ) //xor z wektorem 0xAA
{
if( txt_bin[ i ] == wektor[ i ] )
txt_bin[ i ] = 0;
else
txt_bin[ i ] = 1;
}
licznik = licznik_wpisany; // zamiana licznika na binarny
licznik_bit = 0;
do
{
for( int j = 0; j < 8; j++ )
{
licznik_bin[ j ] = licznik % 2;
licznik /= 2;
licznik_bit++;
}
} while( licznik_bit < 8 );
for( int i = 7; i >= 0; i-- ) // xor z licznikiem
{
if( txt_bin[ i ] == licznik_bin[ i ] )
txt_bin[ i ] = 0;
else
txt_bin[ i ] = 1;
}
mnoznik = 0; //zamiana na ASCII
wartosc = 1;
wartosc_ASCII = 0;
for( int i = 0; i < 8; i++ )
{
if( txt_bin[ i ] == 1 )
wartosc_ASCII = wartosc_ASCII + wartosc;
mnoznik++;
wartosc = wartosc * 2;
}
plikOut << static_cast < char >( wartosc_ASCII );
for( int i = 7; i >= 0; i-- ) //przypisanie wyniku do wektora
wektor[ i ] = txt_bin[ i ];
if( licznik_wpisany == 255 )
licznik_wpisany = 0;
else
licznik_wpisany++;
}
}
plikIn.close();
plikOut.close();
}
void odszyfruj( char plik_we[], char plik_wy[], int licznik, int licznik_wpisany, int mnoznik, int wartosc, int wartosc_ASCII, int licznik_bit, char txt[], int wektor[], int txt_bin[], int licznik_bin[] )
{
cout << "Podaj licznik do odszyfrowania (0-255): " << endl;
cin >> licznik;
if( licznik < 0 and licznik > 255 )
{
cout << "Podales niedozwolony licznik" << endl;
}
else
cout << "Podaj nazwe pliku do odszyfrowania: " << endl;
cin >> plik_we;
cout << "Podaj nazwe pliku do zapisu: " << endl;
cin >> plik_wy;
ifstream plikIn( plik_we );
if( !plikIn )
{
cout << "Plik do odszyfrowania nie zostal otwarty" << endl;
system( "PAUSE" );
}
ofstream plikOut( plik_wy );
if( !plikOut )
{
cout << "Plik do zapisu nie zostal otwarty" << endl;
system( "PAUSE" );
}
while( plikIn )
{
plikIn.read( static_cast < char *>( txt ), 16 );
int len = plikIn.gcount();
if( len == 0 ) break;
for( int i = 0; i < len; i++ )
{
plikIn >> txt[ i ];
cout << static_cast < int >( txt[ i ] ) << endl;
}
for( int i = 0; i < len; i++ )
{
int licznik_bit = 0;
do
{
for( int j = 0; j < 8; j++ )
{
txt_bin[ j ] = txt[ i ] % 2 + 1; //zamiana znaku na binarny
txt[ i ] /= 2;
licznik_bit++;
}
} while( licznik_bit < 8 );
for( int i = 8; i > 0; i-- )
cout << txt_bin[ i ];
cout << endl;
}
}
Wyjaśnienie: