ROT13 – to jeden z najprostszych i jednocześnie najstarszych szyfrów używanych do szyfrowania tekstu. Obecnie nie powinien być już wykorzystywany jako podstawa zapewnienia bezpieczeństwa, świetnie jednak nadaje się do nauki podstaw programowania oraz kryptografii.
Spis treści
ROT13
ROT13 polega na przesunięciu każdej litery alfabetu o stałą liczbę pozycji – 13.
ROT13 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).
Zobaczmy to na przykładzie.
ROT13 – Przykład
Działanie szyfru ROT13 jest bardzo proste.
- Do szyfrowania oraz odszyfrowania naszego tekstu posługujemy się alfabetem łacińskim – 26 znaków.
- Następnie podczas szyfrowania zamieniamy znaki tekstu jawnego na zaszyfrowane przez odnalezienie ich odpowiedników w naszym alfabecie pod pozycją przesuniętą o 13 – jak wskazuje nazwa ROT13.
Przykładowo:
- litera A zostanie zaszyfrowana jako litera N,
- B jako O,
- C jako P itd.
ROT13 – Odszyfrowanie tekstu
Wygoda i prosta ROT13 polega między innymi na tym, że do szyfrowania i odszyfrowywania wykorzystujemy ten sam algorytm.
Czyli, jego dwukrotne użycie na tekście daje w wyniku dokładnie ten sam tekst:
ROT13(ROT13(x)) = x
Zatem odszyfrowanie tekstu będzie polegało na ponownym wykorzystaniu ten samej funkcji szyfrującej – ROT13(tekst);
Dzieje się tak, ponieważ wykorzystujemy 26-znakowy alfabet (2 × 13 = 26).
ROT13 – Algorytm
Algorytm szyfrowania zastosowany w ROT13 powstał na bazie, bardziej ogólnego algorytmu – Szyfru Cezara. W jego przypadku, podczas kodowania możemy sami ustalić przesunięcie.
➡ ZOBACZ 👉: Szyfr Cezara – szyfr CEZARA 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…
ROT13 – Implementacja
Aby lepiej zrozumieć działanie ROT13, 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
ROT13 – Java
Poniższy kod przyjmuje tekst, który ma zostać zaszyfrowany, a następnie zwraca już zaszyfrowany tekst:
for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); if (c >= 'a' && c <= 'm') { c += 13; } else if (c >= 'A' && c <= 'M') { c += 13; } else if (c >= 'n' && c <= 'z') { c -= 13; } else if (c >= 'N' && c <= 'Z') { c -= 13; } result.append(c); }
W naszym kodzie iterujemy po wszystkich elementach tekstu, a następnie szyfrujemy je, poprzez przesuniecie znaków o 13 pozycji – zgodnie z kodami ASCII.
Kody ASCII
Żeby lepiej zrozumieć działania tego algorytmu, potrzebujemy wiedzy na temat kodów ASCII. Tutaj zachęcam do przeczytania materiałów na ten temat:
➡ ZOBACZ 👉: ASCII – ASCII table, tablica kodów ASCII
A => 65 B => 66 C => 67 D => 68 E => 69 F => 70
ROT13 – Ograniczenia
ROT13 nie jest idealnym algorytmem i dla niektórych wyrażeń nie spełnia nawet podstawowych założeń. Może się np. zdarzyć, że zakodowane słowa przybierają formę innych słów w tekście oryginalnym (niezakodowanym).
W skrajnym przypadku może dojść jedynie do zamiany słów miejscami!
Przykładowo:
- ROT13(„ten hejnal urwany gra”)
- po zakodowaniu ma postać – „gra urwany hejnal ten”.
ROT13 – Podsumowanie
ROT13 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!
1 Comments
A tak
private static String alfabet = „abcdefghijklmnopqrstuvwxyz”;
private static List characters(String s) {
List characterList = new ArrayList();
for (int i = 0; i < s.length(); i++) {
characterList.add(s.charAt(i));
}
return characterList;
}
private static String s(List list, String cesar) {
String password = „”;
for (int i = 0; i < cesar.length(); i++) {
int count = 13;
for (int j = 0; j (j + 13))
password += list.get(j + 13);
else
password += list.get((j + 13) – list.size());
}
}
}
return password;
}