Szyfr Atbash
WPROWADZENIE
Szyfr Atbash to prosty szyfr podstawieniowy, pochodzący z tradycji hebrajskiej. Jego działanie polega na zamianie każdej litery alfabetu na literę, która leży w tej samej odległości od końca alfabetu. Innymi słowy, alfabet jest „odwracany”. Np. A zamieniane jest na Z, B na Y, C na X itd. Szyfr Atbash jest bardzo prosty w użyciu, ale również bardzo łatwy do złamania.
Zasada działania
Aby zaszyfrować wiadomość za pomocą szyfru Atbash, wystarczy zamienić każdą literę na odpowiadającą jej literę z odwróconego alfabetu.
| Tekst jawny | A | B | C | D | E | F | G | H | I | J | K | L | M |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Tekst zaszyfrowany | Z | Y | X | W | V | U | T | S | R | Q | P | O | N |
| Tekst jawny | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Tekst zaszyfrowany | M | L | K | J | I | H | G | F | E | D | C | B | A |
Szyfr Atbash jest niezwykle łatwy do złamania. Ponieważ jest to szyfr podstawieniowy, zachowuje on częstotliwość występowania liter. Oznacza to, że litera, która występuje najczęściej w tekście zaszyfrowanym, odpowiada literze, która występuje najczęściej w danym języku. W języku polskim są to litery takie jak „a”, „i”, „o”, „e”, „z”. Analiza częstości liter pozwala na szybkie rozszyfrowanie tekstu. Jednak w przypadku Atbash, metoda analizy częstości liter nie jest konieczna, ponieważ wystarczy odwrócić alfabet.
KOD W JĘZYKU PYTHON
JAK DZIAŁA PROGRAM?
- Import modułu
string:import string– Ta linijka importuje modułstring, który zawiera predefiniowane stałe tekstowe, takie jak wszystkie małe litery (string.ascii_lowercase) i wszystkie wielkie litery (string.ascii_uppercase). Te stałe są używane w kodzie do implementacji szyfru Atbash.
- Funkcja
szyfruj_atbash(szyfrowanie):def szyfruj_atbash(tekst):– Definiuje funkcję o nazwieszyfruj_atbash, która przyjmuje jeden argument:tekst(tekst do zaszyfrowania).wynik = ''– Tworzy pustą zmienną tekstowąwynik, która będzie przechowywać zaszyfrowany tekst.for litera in tekst:– Pętla, która iteruje przez każdą literę (litera) w podanym tekście (tekst).if litera in string.ascii_lowercase:– Jeśliliterajest małą literą…wynik += string.ascii_lowercase[25 - string.ascii_lowercase.index(litera)]– …dodaje dowynikliterę Atbash, która jest obliczana poprzez odjęcie indeksu litery w alfabecie od 25 (odwrócenie alfabetu).
elif litera in string.ascii_uppercase:– Jeśliliterajest wielką literą…wynik += string.ascii_uppercase[25 - string.ascii_uppercase.index(litera)]– …dodaje dowynikliterę Atbash, analogicznie jak dla małych liter.
else:– W przeciwnym razie (jeśliliteranie jest literą, np. spacja, znak interpunkcyjny)…wynik += litera– …dodajeliteradowynikbez zmian.
return wynik– Zwraca zaszyfrowany tekst (wynik).
- Funkcja
odszyfruj_atbash(odszyfrowywanie):def odszyfruj_atbash(tekst):– Definiuje funkcję o nazwieodszyfruj_atbash, która przyjmuje jeden argument:tekst(tekst do odszyfrowania).return szyfruj_atbash(tekst)– Wywołuje funkcjęszyfruj_atbashz podanym tekstem. Ponieważ szyfr Atbash jest samoodwrotny (odszyfrowywanie jest tym samym co szyfrowanie), ta linijka skutecznie odszyfrowuje tekst.
- Użycie funkcji:
tekst_jawny = "Ala ma kota."– Definiuje zmiennątekst_jawnyz przykładowym tekstem do zaszyfrowania.tekst_zaszyfrowany = szyfruj_atbash(tekst_jawny)– Szyfrujetekst_jawnyza pomocą funkcjiszyfruj_atbashi zapisuje wynik w zmiennejtekst_zaszyfrowany.print(f"Tekst jawny: {tekst_jawny}")– Wyświetla oryginalny tekst.print(f"Tekst zaszyfrowany: {tekst_zaszyfrowany}")– Wyświetla zaszyfrowany tekst.tekst_odszyfrowany = odszyfruj_atbash(tekst_zaszyfrowany)– Odszyfrowujetekst_zaszyfrowanyza pomocą funkcjiodszyfruj_atbashi zapisuje wynik w zmiennejtekst_odszyfrowany.print(f"Tekst odszyfrowany: {tekst_odszyfrowany}")– Wyświetla odszyfrowany tekst.