Algorytm szyfrowania przestawnego połączony z Vegnerem

0

Witm koledzy, mam pytanie na ile skuteczny jest mój algorytm szyfrowania:

string czytaj(fstream* plik)
{
	string łańcuch;
	char znak;
	while(true)
	{
		plik->get(znak);
		if(plik->eof())
		{
			break;
		}
		else
		{
			łańcuch+=znak;
		}
	}
	return łańcuch;
}
string szyfruj_hasło(size_t długość, string hasło)
{
	while(długość > hasło.size())
	{
		hasło+=hasło;
	}
	for(size_t i=0;i<hasło.size();i++)
	{
		hasło[i]+=i;
	}
	for(size_t i=0;i<hasło.size();i+=2)
	{
		char znak=hasło[i];
		hasło[i]=hasło[i+1];
		hasło[i+1]=znak;
	}
	return hasło;
}
string szyfruj(string tekst, string hasło)
{
	for(size_t i=0;i<tekst.size();i++)
	{
		tekst[i]=tekst[i]+hasło[i];
	}
	for(size_t i=0;i<tekst.size();i+=2)
	{
		char znak=tekst[i];
		tekst[i]=tekst[i+1];
		tekst[i+1]=znak;
	}
	return tekst;
}
string deszyfruj(string tekst, string hasło)
{
	for(size_t i=0;i<tekst.size();i+=2)
	{
		char znak=tekst[i];
		tekst[i]=tekst[i+1];
		tekst[i+1]=znak;
	}
	for(size_t i=0;i<tekst.size();i++)
	{
		tekst[i]=tekst[i]-hasło[i];
	}
	return tekst;
}
void rysuj(int max)
{
	for(int i=0;i<max;i++)
	{
		cout<<" ";
	}
}
void menu()
{
	int akapit=2;
	cout<<endl;
	rysuj(akapit+32);
	cout<<" Coder 2012 ";
	cout<<endl;
	rysuj(akapit);
	cout<<" Autor: Adam Brzozowski ";
	cout<<endl;
	rysuj(akapit);
	cout<<" 1) Zakoduj plik ";
	cout<<endl;
	rysuj(akapit);
	cout<<" 2) Dekoduj do pliku ";
	cout<<endl;
	rysuj(akapit);
	cout<<" 3) Wyświetl zawartość zakodowanego pliku ";
	cout<<endl;
	rysuj(akapit);
	cout<<" 4) Wyjdź z programu ";
	cout<<endl;
	rysuj(akapit+1);
}
int main()
{
	locale myloc ("Polish");
	locale oldloc = locale::global (myloc);
	system("cls");
	menu();
	int akcja=0;
	cin>>akcja;
	switch(akcja)
	{
	default:
		{
			main();
		}
		break;
	case 1:
		{
			plik_zakoduj();
		}
		break;
	case 2:
		{
			plik_dekoduj();
		}
		break;
	case 3:
		{
			tekst_dekoduj();
		}
		break;
	case 4:
		{
			return 0;
		}
		break;
	}
}

void tekst_dekoduj()
{
	string nazwa, hasło, tekst_tajny, tekst_jawny; 
	fstream plik_tajny;
	system("cls");
	cout<<"Podaj nazwę pliku do tajnego."<<endl;
	cout<<"Plik musi znajdować się w katalogu z aplikacją."<<endl;
	cin>>nazwa;
	plik_tajny.open(nazwa, ios::in);
	if(plik_tajny.is_open())
	{
		cout<<"Podaj hasło zabezpieczające."<<endl;
		cin>>hasło;
		tekst_tajny=czytaj(&plik_tajny);
		hasło=szyfruj_hasło(tekst_tajny.size(), hasło);
		tekst_jawny=deszyfruj(tekst_tajny, hasło);
		system("cls");
		cout<<tekst_jawny;
		_getch();
	}
	else
	{
		cout<<"Nie udało się otworzyć pliku."<<endl;
		cout<<"Sprawdź nazwę i rozszerzenie."<<endl;
		cout<<"Aby kontynuować wybierz enter."<<endl;
		_getch();
		tekst_dekoduj();
	}
	plik_tajny.close();
	main();
}
void plik_dekoduj()
{
	string nazwa, hasło, tekst_tajny, tekst_jawny; 
	fstream plik_jawny, plik_tajny;
	system("cls");
	cout<<"Podaj nazwę pliku do tajnego."<<endl;
	cout<<"Plik musi znajdować się w katalogu z aplikacją."<<endl;
	cin>>nazwa;
	plik_tajny.open(nazwa, ios::in);
	if(plik_tajny.is_open())
	{
		cout<<"Podaj nazwę pliku jawnego."<<endl;
		cin>>nazwa;
		plik_jawny.open(nazwa, ios::out);
		if(plik_jawny.is_open())
		{
			cout<<"Podaj hasło zabezpieczające."<<endl;
			cin>>hasło;
			tekst_tajny=czytaj(&plik_tajny);
			hasło=szyfruj_hasło(tekst_tajny.size(), hasło);
			tekst_jawny=deszyfruj(tekst_tajny, hasło);
			plik_jawny<<tekst_jawny;
		}
		else
		{
			cout<<"Nie udało się utworzyć jawnego pliku"<<endl;
			cout<<"Aby kontynuować wybierz enter."<<endl;
			_getch();
		}
	}
	else
	{
		cout<<"Nie udało się otworzyć pliku."<<endl;
		cout<<"Sprawdź nazwę i rozszerzenie."<<endl;
		cout<<"Aby kontynuować wybierz enter."<<endl;
		_getch();
		plik_dekoduj();
	}
	plik_jawny.close();
	plik_tajny.close();
	main();
}
void plik_zakoduj()
{
	string nazwa, hasło, tekst_jawny, tekst_tajny; 
	fstream plik_jawny, plik_tajny;
	system("cls");
	cout<<"Podaj nazwę pliku do jawnego."<<endl;
	cout<<"Plik musi znajdować się w katalogu z aplikacją."<<endl;
	cin>>nazwa;
	plik_jawny.open(nazwa, ios::in);
	if(plik_jawny.is_open())
	{
		cout<<"Podaj nazwę pliku tajnego."<<endl;
		cin>>nazwa;
		plik_tajny.open(nazwa, ios::out);
		if(plik_tajny.is_open())
		{
			cout<<"Podaj hasło zabezpieczające."<<endl;
			cin>>hasło;
			tekst_jawny=czytaj(&plik_jawny);
			hasło=szyfruj_hasło(tekst_jawny.size(), hasło);
			tekst_tajny=szyfruj(tekst_jawny, hasło);
			plik_tajny<<tekst_tajny;
		}
		else
		{
			cout<<"Nie udało się utworzyć zakodowanego pliku"<<endl;
			cout<<"Aby kontynuować wybierz enter."<<endl;
			_getch();
		}
	}
	else
	{
		cout<<"Nie udało się otworzyć pliku."<<endl;
		cout<<"Sprawdź nazwę i rozszerzenie."<<endl;
		cout<<"Aby kontynuować wybierz enter."<<endl;
		_getch();
		plik_zakoduj();
	}
	plik_jawny.close();
	plik_tajny.close();
	main();
} 
0

Poprawiłem kod, przeanalizujcie teraz:

 string generacja_hasła(size_t długość, string hasło)
{
	while(długość > hasło.size())
	{
		hasło+=hasło;
	}
	hasło+=hasło;
	for(size_t i=0;i<hasło.size();i++)
	{
		if(i!=hasło.size()-1 && !hasło[i]+hasło[i]>0)
		{
			hasło[i]+=hasło[i+1];
		}
		else if(i!=hasło.size()-1 && !hasło[i]-hasło[i]>0)
		{
			hasło[i]-=hasło[i+1];
		}
		else
		{
			hasło[i]=+i;
		}
	}
	for(size_t i=0;i<hasło.size();i+=2)
	{
		char znak=hasło[i];
		hasło[i]=hasło[i+1];
		hasło[i+1]=znak;
	}
	return hasło;
}
string szyfrowanie(string tekst, string hasło)
{
	if(tekst.size()%2==1)
	{
		tekst+=" ";
	}
	for(size_t i=0;i<tekst.size();i++)
	{
		tekst[i]=tekst[i]+hasło[i];
	}
	for(size_t i=0;i<tekst.size();i+=2)
	{
		char znak=tekst[i];
		tekst[i]=tekst[i+1];
		tekst[i+1]=znak;
	}
	return tekst;
}
string deszyfrowanie(string tekst, string hasło)
{
	for(size_t i=0;i<tekst.size();i+=2)
	{
		char znak=tekst[i];
		tekst[i]=tekst[i+1];
		tekst[i+1]=znak;
	}
	for(size_t i=0;i<tekst.size();i++)
	{
		tekst[i]=tekst[i]-hasło[i];
	}
	return tekst;
}
0

Twój program jest niezgodny ze składnią C++ (nazwy identyfikatorów zawierają niedozwolone znaki), więc nawet się nie skompiluje :P

Btw, co rozumiesz poprzez "skuteczny algorytm szyfrowania"?

1 użytkowników online, w tym zalogowanych: 0, gości: 1