Szyfrowanie/Deszyfrowanie XOR

0

Witam,

Napisałem taki prosty kod, którego zadaniem ma być szyfrowanie/deszyfrowanie XORem i nie pracuje tak jak powinien.
Chcę zrobić tak by wynik szyfrowania był w zakresie liczb alfabetu, dlatego robię operację modulo 26 i dodaję 97 jako pierwszy znak alfabetu (małych liczb, na razie chcę, żeby dla małych pracowało chociaż).
Po deszyfracji natomiast nie wszystkie znaki się zgadzają z ciągiem początkowym, z tego co zauważyłem to często mają przesunięcie o 2. Tzn:
Powinna być litera np. f, a jest d.
Dla tych danych co jest w programie mam np. tak:
zdanie ---> bgckih (po zaszyfrowaniu)
bgckih ---> dfapik (po deszyfracji)
Tylko 2 znaki są na swoich pozycjach.

#include <iostream>

using namespace std;

int main(){

	char c1[7] = "zdanie";
	char key[5] = "abcd";
	char encrypted[7];
	
	size_t size = sizeof(c1) - 1 ;
	
	int i = 0;
	do{
		encrypted[i] = ((c1[i] ^ key[i%4])%26 + 97);
	}while(i++ < size);

	encrypted[size] = '\0';
	
	cout << encrypted << endl;
	
	i = 0;
	do{
		encrypted[i] = ((encrypted[i] ^ key[i%4])%26 + 97);
		
	}while(i++ < size -1);
	
	cout << encrypted << endl;
	
	return 0;
}
0

Nie rozumiesz czemu: (((a^x)%m)^x)%m!=a ?

0

A jak z tego xor wyjdzie ci 1 a w innej sytuacji 27 to jak to potem chcesz dekodować? Oba dadzą ci przecież ten sam symbol...

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