Szyfrowania wiadomości
Szyfrowanie jest kluczowym elementem w zabezpieczaniu danych w świecie cyfrowym. Istnieje wiele metod szyfrowania, od klasycznych szyfrów takich jak szyfr Cezara, po nowoczesne algorytmy kryptograficzne. W tym artykule skupimy się na stworzeniu prostego szyfru opartego na dwóch podstawowych operacjach: odwracaniu ciągu znaków oraz wymianie symboli na podstawie wcześniej zdefiniowanych tablic znaków. Ten szyfr stanowi przykład kreatywnego podejścia do szyfrowania i choć jest stosunkowo prosty, może być inspirującym wstępem do bardziej zaawansowanych metod kryptografii.
Zasada działania szyfru
Proces szyfrowania w tym przypadku odbywa się w dwóch głównych krokach:
Odwracanie ciągu znaków – Pierwszym krokiem szyfrowania jest odwrócenie kolejności znaków w podanym ciągu tekstowym. Dla przykładu, jeśli chcemy zaszyfrować słowo „adam malysz”, najpierw odwracamy jego kolejność, co daje nam „zylam mada”.
Wymiana symboli – Następnie każdy znak w odwróconym ciągu zostaje zastąpiony nowym symbolem na podstawie wcześniej zdefiniowanych tablic alfabetów. Mamy dwie tablice: pierwsza zawiera znaki alfabetu (np.
a,b,c, itd.), a druga odpowiadające im symbole specjalne (np.!,@,#, itd.). Każdy znak z odwróconego ciągu jest sprawdzany w pierwszej tablicy, a następnie na jego miejscu pojawia się odpowiadający mu symbol z drugiej tablicy.
Na przykład, litera a może być zastąpiona przez !, litera b przez @, i tak dalej. W ten sposób uzyskujemy nowy, zaszyfrowany ciąg znaków.
Dlaczego te dwa kroki?
Odwracanie ciągu znaków stanowi prosty sposób na ukrycie treści. Wprowadza element zaskoczenia – ktoś, kto widzi zaszyfrowaną wiadomość, nie od razu dostrzega, że może to być po prostu odwrócony tekst. Następnie, wymiana symboli wprowadza dodatkową warstwę zamaskowania. Zamiast odwróconych liter, odbiorca widzi ciąg niezrozumiałych symboli. Te dwa kroki, choć proste, działają razem, aby skutecznie ukryć oryginalną treść.
Szyfr Cezara – historyczne tło
Aby lepiej zrozumieć tę metodę szyfrowania, warto przyjrzeć się jednemu z najstarszych i najbardziej znanych szyfrów – szyfrowi Cezara. Szyfr ten jest nazwany na cześć rzymskiego wodza Gajusza Juliusza Cezara, który używał tej metody do szyfrowania swoich wojskowych wiadomości.
Szyfr Cezara polega na przesunięciu każdej litery w wiadomości o ustaloną liczbę miejsc w alfabecie. Na przykład, przy przesunięciu o 3 miejsca, litera A staje się D, B staje się E, i tak dalej. Gdy dochodzimy do końca alfabetu, wracamy do jego początku. Szyfr ten jest niezwykle prosty, ale jak na swoje czasy, był skutecznym sposobem na ukrycie informacji przed niepowołanymi osobami.
Chociaż szyfr Cezara jest obecnie uważany za łatwy do złamania, stanowi ważny element w historii kryptografii i położył podwaliny pod bardziej złożone algorytmy szyfrowania. Używany był jeszcze w czasach starożytnych i wczesnego średniowiecza, a jego zasada przesunięcia liter wciąż jest wykorzystywana w niektórych prostych systemach szyfrowania, np. w tzw. szyfrze ROT13, który przesuwa litery o 13 miejsc.
Nowoczesne podejście do szyfrowania
Podobnie jak szyfr Cezara, nasza metoda opiera się na prostych operacjach na znakach, jednak dodanie elementu odwracania ciągu i wymiany na symbole z innych tablic dodaje dodatkową warstwę ochrony. Chociaż szyfrowanie to w praktyce jest zabawkowe i nie znajdzie zastosowania w poważnej kryptografii, może posłużyć jako edukacyjny przykład na to, jak prosto można stworzyć własny szyfr.
Współczesne systemy kryptograficzne, takie jak AES (Advanced Encryption Standard), RSA, czy algorytmy asymetryczne, są oparte na zaawansowanej matematyce, która zapewnia wysoki poziom bezpieczeństwa. Jednak ich zasady, choć skomplikowane, mają korzenie w prostych ideach – takich jak szyfr Cezara czy nasz szyfr oparty na odwracaniu i wymianie symboli.
Podsumowanie
Tworzenie prostych szyfrów, jak ten oparty na odwracaniu ciągu znaków i zamianie liter na symbole, może być fascynującą lekcją wprowadzającą do kryptografii. Chociaż takie szyfrowanie nie chroni skutecznie przed współczesnymi atakami, to w połączeniu z historią szyfru Cezara pokazuje, jak rozwijała się sztuka ukrywania wiadomości na przestrzeni wieków. Dzisiaj, przy zaawansowanych technikach kryptograficznych, możemy cieszyć się pełnym bezpieczeństwem naszych danych – ale warto pamiętać, że wszystko zaczęło się od prostych, manualnych metod.
#include <iostream>
#include <string>
std::string odwroc(std::string imie) {
std::string imie_odwrot = "";
for (int i = imie.size() - 1; i >= 0; i--) {
imie_odwrot += imie[i];
}
return imie_odwrot;
}
std::string zaszyfruj(std::string imie_odwrot, char alphabet1[], char alphabet2[], int alphabet_size) {
std::string zaszyfrowane = "";
for (char znak : imie_odwrot) {
for (int i = 0; i < alphabet_size; i++) {
if (alphabet1[i] == znak) {
zaszyfrowane += alphabet2[i];
break;
}
}
}
return zaszyfrowane;
}
int main() {
std::string imie = "adam malysz";
char alphabet1[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '}; // Dodałem spację jako znak
char alphabet2[] = {'!', '@', '#', '%', '^', '&', '*', '(', '1', '2', '7', '+', '}',
'<', '>', ';', ':', '[', 's', 'q', '3', '4', '6', '8', '9', '0'};
int alphabet_size = sizeof(alphabet1) / sizeof(alphabet1[0]);
std::string imie_odwrot = odwroc(imie);
std::string zaszyfrowane_imie = zaszyfruj(imie_odwrot, alphabet1, alphabet2, alphabet_size);
std::cout << "Imię odwrotne: " << imie_odwrot << "\n";
std::cout << "Zaszyfrowane imię: " << zaszyfrowane_imie << "\n";
}
