Kurzusok
/
Python
Python
/
Feladatok
/
Egyszerű rejtjel
Egyszerű rejtjel

Egyszerű rejtjel

Könnyű

Utasítások

Készítsd el a Vigenère-rejtjel egy megvalósítását. A Vigenère-rejtjel egy egyszerű helyettesítő rejtjel.

A rejtjelezés terminológiája

A rejtjel egy algoritmus, amellyel egy stringet titkosítunk, azaz kódolunk. A titkosítatlan stringet nyílt szövegnek, a titkosítottat pedig rejtjelszövegnek nevezzük. A nyílt szöveg rejtjelszöveggé alakítását kódolásnak, a fordítottját dekódolásnak nevezzük.

Egy helyettesítő rejtjelben a nyílt szöveg minden betűjét egy rejtjelszöveg-betűre cseréljük, amelyet egy kulcs segítségével számítunk ki. (Megjegyzés: előfordulhat, hogy a helyettesítő betű megegyezik az eredetivel.)

A kódolás részletei

Ebben a rejtjelben a kulcs kisbetűk sorozata, például "abcd". A nyílt szöveg minden betűjét eltoljuk vagy elforgatjuk a kulcs megfelelő betűjén alapuló távolsággal. A kulcsban egy "a" 0 eltolást jelent (vagyis nincs eltolás). A kulcsban egy "b" 1 eltolást jelent. A kulcsban egy "c" 2 eltolást jelent, és így tovább.

A nyílt szöveg első betűje a kulcs első betűjét használja, a második betű a kulcs második betűjét, és így tovább. Ha a kulcs betűi elfogynak, mielőtt a nyílt szöveg betűi elfogynának, kezdd újra a kulcs elejéről.

Ha a kulcs csak egyetlen betűt tartalmaz, például "dddddd", akkor a nyílt szöveg minden betűjét ugyanannyival (jelen esetben hárommal) toljuk el, ami ugyanaz, mint az elforgatásos rejtjel vagy eltolásos rejtjel (amit néha Caesar-rejtjelnek is neveznek). Például a "iamapandabear" nyílt szövegből "ldpdsdqgdehdu" lesz.

Ha a kulcs csak az "a" betűt tartalmazza (egyszer vagy többször), az eltolás mértéke nulla, és a rejtjelszöveg megegyezik a nyílt szöveggel.

A kulcs azonban általában ennél bonyolultabb! Ha a kulcs "abcd", akkor a nyílt szöveg betűit 0, 1, 2 és 3 távolsággal toljuk el. Ha a nyílt szöveg "hello", 5 eltolásra van szükség, így a kulcs körbeér, és az eltolási távolságok 0, 1, 2, 3 és 0 lesznek. Ezeket az eltolásokat a "hello" betűire alkalmazva "hfnoo"-t kapunk.

Véletlenszerű kulcsok

Ha nincs megadva kulcs, generálj egy kulcsot, amely legalább 100 véletlenszerű, a latin ábécéből származó kisbetűből áll.

Használjam itt a random-ot vagy a secrets-et?

A Python 3.6 óta két különböző modul áll rendelkezésre „véletlen” számok előállítására:

A random nevű modul pszeudovéletlen, ami azt jelenti, hogy nem állít elő valódi véletlenszerűséget, hanem egy olyan algoritmust követ, amely szimulálja a véletlenszerűséget. Mivel ezeket a „véletlen számokat” egy ismert algoritmus állítja elő, valójában nem véletlenek. Ezért a random modul nem igazán alkalmas kriptográfiai célokra, és nem is szabad használni, pont azért, mert pszeudovéletlen.

A secrets nevű modul kriptográfiailag erős „véletlen” számokat állít elő, amelyek nagyobb biztonságot nyújtanak, ami a kriptográfiához szükséges. A legszigorúbb értelmezés szerint ezek is pszeudovéletlenek, de garanciát adnak arra, hogy az általuk előállított számok teljesen kiszámíthatatlanok.

Mivel ez csak egy gyakorlófeladat, nyugodtan használhatod a random modult, de jegyezd meg, hogy valódi kriptográfiára használva nagyon nem lenne biztonságos.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Python Exercism

Készen állsz elkezdeni a(z) Egyszerű rejtjel feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.