Szyfr Cezara – to jeden z najprostszych i jednocześnie najstarszych szyfrów używanych do szyfrowania tekstu. Wykorzystywany był jeszcze zanim ktokolwiek słyszał o programowaniu 🙂
Spis treści
Szyfr Cezara
Szyfr Cezara polega na przesunięciu każdej litery alfabetu o stałą liczbę pozycji w prawo lub w lewo.
Szyfr Cezara jest jedną z najprostszych technik szyfrowania. Jest to rodzaj szyfru podstawieniowego, w którym każda litera tekstu jawnego (niezaszyfrowanego) zastępowana jest inną, oddaloną od niej o stałą liczbę pozycji w alfabecie literą (szyfr monoalfabetyczny).
W podstawowej wersji tego algorytmu – nie rozróżnia się przy tym liter dużych i małych.
Zobaczmy to na przykładzie.
Szyfr Cezara – Przykład
Działanie szyfru Cezara jest bardzo proste. Należy wybrać:
- ustaloną wartość przesunięcia liter,
- a następnie zastosować to przesunięcie do każdej litery w tekście.
Przykładowo, jeśli ustalimy przesunięcie o 3 pozycje w prawo, to:
- litera A zostanie zaszyfrowana jako litera D,
- B jako E,
- C jako F itd.
Szyfr Cezara – Historia
Za autora tego szyfru uznaje się Juliusza Cezara, który prawdopodobnie używał go do szyfrowania swoich prywatnych listów w korespondencji ze znajomymi.
Dziś, gdyby nasi politycy próbowali wykorzystać ten lub podobny szyfr – szybko usłyszelibyśmy o ich listach i wiadomościach 😉
Szyfr Cezara – Algorytm
Algorytm szyfrowania zastosowany w kodzie Cezara jest bazą dla wielu innych systemów szyfrujących, jak chociażby szyfru Vigenère’a, czy ROT13.
➡ ZOBACZ 👉: ROT13 – ROT13 online, przykłady, gotowa implementacja
Jednak należy pamiętać, że tego typu techniki podmieniające pojedyncze litery alfabetu na inne, nie oferują w praktyce żadnego bezpieczeństwa komunikacji…
O ile w czasach Cezara takie podejście mogło się sprawdzać, tak obecnie jest to zwyczajnie zbyt prymitywny algorytm szyfrowania. Przez co bardzo szybko zostałby złamany, a nasza wiadomość mogłaby dostać się w niepowołane ręce.
Szyfr Cezara – implementacja
Aby lepiej zrozumieć działanie szyfru Cezara, warto przyjrzeć się implementacji w Java. Albo nawet lepiej! Samodzielnie spróbować ją przygotować 🙂
Jeżeli dopiero stawiasz swoje pierwsze kroki w programowaniu, to zapraszam do naszego darmowego kursu Java:
➡ ZOBACZ 👉: Kurs Java | Darmowy Kurs Programowania w Javie
Jeżeli natomiast myślisz o pracy jako programista i chcesz zostać Junior Developerem, zobacz ten materiał:
➡ ZOBACZ 👉: Młodszy programista (Junior developer) – jak zostać?, CV, zarobki, praca
E-book Java Cheat Sheet
Pobierz darmowy e-book „Java Cheat Sheet”.
To kompendium wiedzy, dla osób, które uczą się lub chcą uczyć się programowania w Javie.
Aż 24 strony samych konkretów!
Znajdziesz w nim:
- grafiki,
- przykłady kodu,
- komendy,
- objaśnienia,
dzięki którym nauka Javy będzie dużo łatwiejsza!
➡ ZOBACZ 👉: Pobieram e-book Java Cheat Sheet
Szyfr Cezara – Java
Poniższy kod przyjmuje tekst, który ma zostać zaszyfrowany, oraz wartość przesunięcia, a następnie zwraca zaszyfrowany tekst:
public String decrypt(String input, int shift) { StringBuffer result = new StringBuffer(); for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); int charPosition = alphabet.indexOf(c); if (charPosition < 0) { result.append(c); } else { int newKey = (charPosition + shift) % alphabet.length(); char newValue = alphabet.charAt(newKey); result.append(newValue); } } return result.toString(); }
W powyższym kodzie wykorzystujemy zmienną pomocniczą, która przechowuje znaki wykorzystywane w alfabecie. Możemy spotkać się różnymi wersjami tego algorytmu, w zależności od wykorzystywanego alfabetu, np.
- Małe znaki języka angielskiego –
abcdefghijklmnopqrstuvwxyz
Nic jednak nie stoi na przeszkodzie, by rozwinąć go np. do
- wszystkich liter polskiego alfabetu oraz cyfr –
aąbcćdeęfghijklłmnoópqrsśtuvwxyzźżAĄBCĆDEĘFHGIJKLMNOÓPQRSŚTUVWXYZŹŻ
Należy jedynie pamiętać, żeby do szyfrowania i odszyfrowywania naszych wiadomości wykorzystać to samo przesunięcie oraz ten sam alfabet.
Szyfr Cezara – Omówienie algorytmu
Gdy mamy już ustalone znaki alfabetu, algorytm szyfrowania sprowadza się do kilku prostych kroków:
- iterujemy po wszystkich znakach tekstu, który chcemy zaszyfrować
- i dla każdego z nich, próbujemy odnaleźć pozycję w naszym alfabecie,
- jeżeli odnajdziemy znak w alfabecie, to zaszyfrowany znak będzie pod indeksem powiększonym o wykorzystywane przesunięcie,
- w przeciwnym wypadku do szyfrogramu trafia niezmieniony znak.
➡ ZOBACZ 👉: StringBuilder: czy zawsze taki szybki? | String vs StringBuilder vs StringBuffer
Aby zaszyfrować tekst, można wywołać tę funkcję w następujący sposób:
CaesarCipher.polishLetters().encrypt("Ala Zna Javę", 12);
Wynikiem będzie zaszyfrowany tekst: „rbR ÓdR ARłX”.
Szyfr Cezara – Podsumowanie
Szyfr Cezara jest bardzo prostym i łatwym do złamania algorytmem, dlatego nie powinien być obecnie wykorzystywany w kryptografii.
Świetnie jednak sprawdza się jako ćwiczenie programistyczne dla osób, które chcą rozwijać swoje umiejętności oraz poznać podstawy kryptografii.
20+ BONUSOWYCH materiałów z programowania
e-book – „8 rzeczy, które musisz wiedzieć, żeby dostać pracę jako programista”,
e-book – „Java Cheat Sheet”,
checklista – „Pytania rekrutacyjne”
i wiele, wiele wiecej!