Problem z programem szyfrującym

0

Witam, uczę się c++ i próbuję zrobić program szyfrujący wraz z deszyfratorem. Wszystko wygląda w porządku, ale z jakiegoś powodu kiedy próbuję rozszyfrować jakiś tekst, to wychodzi całkowicie inny wynik niż powinien. Tak wyglądają moje kody:

Do szyfrowania:

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
	int seed, dzialania, b, c, d, e, seed2, dzialania2;
	string slowo, slowo2;
	char a, f;

	cout<<"Podaj slowo/a, ktore ma byc zaszyfrowane: ";
	getline(cin, slowo);
	cout<<"Podaj liczby: ";
	cin>>seed;
	cin>>dzialania;
	srand(seed);
	
	cout<<seed;
	for(int i=0; i<=slowo.length()-1; i++)
	{
		a=slowo.at(i);
		b=a;
		if(dzialania==1)
		{
			c=b+rand()%29;
			c=c*2+3;
		}
		
		else if(dzialania==2)
		{
			c=b-rand()%51;
			c=c*3+8;
		}
		else if(dzialania==3)
		{
			c=b-rand()%21+rand()%21;
		}
		
		a=c;
		cout<<a;
	}
	cout<<dzialania;
}

Deszyfrator:

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
	int seed, dzialania, b, c;
	char a;
	string slowo;
	cout<<"Podaj tekst do odszyfrowania: ";
	getline(cin, slowo);
	int tablica[slowo.length()] = {};
	cout<<"Podaj liczby: ";
	cin>>seed;
	cin>>dzialania;
	
	srand(seed);
	for(int i=0; i<=slowo.length()-1; i++)
	{
		a=slowo.at(i);
		b=a;
		if(dzialania==1)
		{
			tablica[i]=b-rand()%29;
			c=tablica[i]/2-3;
			
		}
		/*
		else if(dzialania==2)
		{
			c=b-rand()%51;
			c=c/3-8;
		}
		else if(dzialania==3)
		{
			c=b+rand()%21-rand()%21;
		}
		*/
		a=c;
		cout<<a;
		
	}
}

W tej chwili próbuję zrozumieć co źle działa w zawartości pierwszego if'a (dzialania==1), reszty jeszcze nie sprawdzałem. Tak wygląda w tej chwili cały proces szyfrowania i deszyfrowania wiadomości:
Oryginał: abc 97 98 99
Zaszyfrowany: Ţ§ß 221 245 225
Rozszyfrowany: ŠýŔ 230 236 232

I z jakiegoś powodu zwiększa mi wartość w systemie ascii zamiast ją zmniejszać.

//Seed, którego używałem podczas testowania tych programów to 1.

5

W pierwszym kroku radziłbym podzielić te programy na małe funkcje.
Oddziel interakcje z użytkownikiem od szyfrowania.
napisz funkcje:

std::string encrypt(const std::string& s, int seed, int dzialania);
std::string decrypt(const std::string& s, int seed, int dzialania);

Na pierwszy rzut oka wygląda na to, że wypisujesz znaki bezsensu i liczysz na to, że kodowanie znaków się nie pochrzani.

0
Bajgiel napisał(a):

... że z jakiegoś powodu źle mi działa mnożenie i dzielenie w kodzie, zmieniłem metodę szyfrowania ...

Mnożenie i dzielenie nic do tego nie mają, nie ustawiasz seed i korzystasz z rand() więc przy deszyfracji masz inny zestaw wartości rand()

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