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;
}