To mój pierwszy kontakt z programami szyfrującymi tekst (a zarazem pierwsza, samodzielna zabawa z plikami).
Kod:
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
using namespace std;
void szyfrowanie (void);
void deszyfrowanie (void);
void inf (void);
/*------------------------------main ()-------------------------------*/
int main()
{
bool exit=true;
int wybor;
cout<<"[ctrl]+[S] - szyfruj plik"<<endl;
cout<<"[ctrl]+[D] - deszyfruj plik"<<endl;
cout<<"[esc] - exit"<<endl;
while(exit)
{
wybor=getch();
switch(wybor)
{
case 19:
szyfrowanie();
break;
case 4:
deszyfrowanie();
break;
case 27:
exit=false;
break;
case 59:
inf();
break;
}
}
}
/*---------------------------szyfrowanie()---------------------------*/
void szyfrowanie(void)
{
cout<<"Szyfrowanie pliku\n";
/*=====OPERACJE NA KLUCZU=====*/
int a, b, c, d;
cout<<"Podaj 4-cyfrowy klucz szyfrowania"<<endl;
a=getch();
b=getch();
c=getch();
d=getch();
cout<<"Klucz to: "<<a<<b<<c<<d<<endl;
/*===== PLIK POCZĄTKOWY =====*/
fstream wejscie;
wejscie.open("wiadomosc.txt",ios::in|ios::binary);
if(!wejscie)
{
cerr<<"Open (in) [ERROR]\n";
return;
}
else cout<<"Open (in) [OK]\n";
/*====== PLIK WYNIKOWY ======*/
fstream wyjscie;
wyjscie.open("wiadomosc_w.txt",ios::out|ios::binary);
if(!wyjscie)
{
cerr<<"Open (out) [ERROR]\n";
return;
}
else cout<<"Open (out) [OK]\n";
/*== ODCZYT I ZAPIS ZNAKÓW DO PLIKÓW ==*/
char znak[1000];
wejscie.read(znak, 1000);
/*""""""""" PROCES SZYFROWANIA """"""""*/
int l=0;
while(l<=999)
{
znak[l]=znak[l]>>a;
l++;
znak[l]=znak[l]>>b;
l++;
znak[l]=znak[l]>>c;
l++;
znak[l]=znak[l]>>d;
l++;
}
wyjscie.write(znak, 1000);
wejscie.close();
wyjscie.close();
return;
}
/*--------------------------deszyfrowanie()--------------------------*/
void deszyfrowanie(void)
{
cout<<"Deszyfrowanie pliku\n";
/*=====OPERACJE NA KLUCZU=====*/
int a, b, c, d;
cout<<"Podaj 4-cyfrowy klucz do deszfrowania, klucz\n";
cout<<"ten musi byc identyczny z kluczem szyfrowania."<<endl;
a=getch();
b=getch();
c=getch();
d=getch();
cout<<"Klucz to: "<<a<<b<<c<<d<<endl;
/*===== PLIK POCZĄTKOWY =====*/
fstream wejscie;
wejscie.open("wiadomosc_w.txt",ios::in|ios::binary);
if(!wejscie)
{
cerr<<"Open (in) [ERROR]\n";
return;
}
else cout<<"Open (in) [OK]\n";
/*====== PLIK WYNIKOWY ======*/
fstream wyjscie;
wyjscie.open("wiadomosc.txt",ios::out|ios::binary);
if(!wyjscie)
{
cerr<<"Open (out) [ERROR]\n";
return;
}
else cout<<"Open (out) [OK]\n";
/*== ODCZYT I ZAPIS ZNAKÓW DO PLIKÓW ==*/
char znak[1000];
wejscie.read(znak, 1000);
cout<<znak<<endl;
/*"""""""" PROCES DESZYFROWANIA """""""*/
int l=0;
while(l<=999)
{
znak[l]=znak[l]<<a;
l++;
znak[l]=znak[l]<<b;
l++;
znak[l]=znak[l]<<c;
l++;
znak[l]=znak[l]<<d;
l++;
}
wyjscie.write(znak, 1000);
wejscie.close();
wyjscie.close();
return;
}
/*---------------------------Informacje[F1]--------------------------*/
void inf (void)
{
}
Program się kompiluje i uruchamia. Problem pojawia się przy szyfrowaniu/ deszyfrowaniu. Z założenia wiadomość do zaszyfrowania miała być wpisana w wiadomosc.txt, a w pliku wiadomosc_w.txt miala byc w postaci zaszyfrowanej. Deszyfrowanie analogicznie. Niestety po zaszyfrowaniu i odszyfrowaniu wiadomości w obu plikach znajduje się ciąg białych znaków.
Proszę o jakieś wskazówki (zależy mi na możliwości wprowadzenia "klucza" i chcę uniknąć czegoś w stylu:
Kod:
if (znak[x]==a)znak[x]=b;
if (znak[x]==b)znak[x]=c;
etc.)
//Przepraszam za dość ograniczoną czytelność kodu (wcięcia). U mnie wygląda to dobrze, nie wiem czemu na forum się przestawia.