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
import string
def szyfruj_atbash(tekst):
wynik = ''
for litera in tekst:
if litera in string.ascii_lowercase:
wynik += string.ascii_lowercase[25 - string.ascii_lowercase.index(litera)]
elif litera in string.ascii_uppercase:
wynik += string.ascii_uppercase[25 - string.ascii_uppercase.index(litera)]
else:
wynik += litera
return wynik
def odszyfruj_atbash(tekst):
return szyfruj_atbash(tekst) # Atbash jest samoodwrotny
# Przyk艂adowe u偶ycie
tekst_jawny = "Ala ma kota."
tekst_zaszyfrowany = szyfruj_atbash(tekst_jawny)
print(f"Tekst jawny: {tekst_jawny}")
print(f"Tekst zaszyfrowany: {tekst_zaszyfrowany}")
tekst_odszyfrowany = odszyfruj_atbash(tekst_zaszyfrowany)
print(f"Tekst odszyfrowany: {tekst_odszyfrowany}")
猬嗭笍猬嗭笍猬嗭笍 Zobacz w Google Colaboratory
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 nazwie聽szyfruj_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艣li聽litera
聽jest ma艂膮 liter膮…wynik += string.ascii_lowercase[25 - string.ascii_lowercase.index(litera)]
聽– …dodaje do聽wynik
聽liter臋 Atbash, kt贸ra jest obliczana poprzez odj臋cie indeksu litery w alfabecie od 25 (odwr贸cenie alfabetu).
elif litera in string.ascii_uppercase:
聽– Je艣li聽litera
聽jest wielk膮 liter膮…wynik += string.ascii_uppercase[25 - string.ascii_uppercase.index(litera)]
聽– …dodaje do聽wynik
聽liter臋 Atbash, analogicznie jak dla ma艂ych liter.
else:
聽– W przeciwnym razie (je艣li聽litera
聽nie jest liter膮, np. spacja, znak interpunkcyjny)…wynik += litera
聽– …dodaje聽litera
聽do聽wynik
聽bez zmian.
return wynik
聽– Zwraca zaszyfrowany tekst (wynik
).
- Funkcja聽
odszyfruj_atbash
聽(odszyfrowywanie):def odszyfruj_atbash(tekst):
聽– Definiuje funkcj臋 o nazwie聽odszyfruj_atbash
, kt贸ra przyjmuje jeden argument:聽tekst
聽(tekst do odszyfrowania).return szyfruj_atbash(tekst)
聽– Wywo艂uje funkcj臋聽szyfruj_atbash
聽z 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_jawny
聽z przyk艂adowym tekstem do zaszyfrowania.tekst_zaszyfrowany = szyfruj_atbash(tekst_jawny)
聽– Szyfruje聽tekst_jawny
聽za pomoc膮 funkcji聽szyfruj_atbash
聽i zapisuje wynik w zmiennej聽tekst_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)
聽– Odszyfrowuje聽tekst_zaszyfrowany
聽za pomoc膮 funkcji聽odszyfruj_atbash
聽i zapisuje wynik w zmiennej聽tekst_odszyfrowany
.print(f"Tekst odszyfrowany: {tekst_odszyfrowany}")
聽– Wy艣wietla odszyfrowany tekst.
Dodaj komentarz