logo

Cezarova šifra u Pythonu

U ovom vodiču ćemo istražiti jednu od metoda šifriranja koja se zove Caesar Cipher. To je dio kriptografije.

Uvod

U ovoj tehnici, svaki znak je zamijenjen slovom određenog fiksnog broja koji se nalazi iza ili ispred abecede. Na primjer - abeceda B zamijenjena je s dva mjesta niže D. D bi postalo F i tako dalje. Ova je metoda dobila ime po popularnim frikcijskim likovima Juliju Cezaru koji ju je koristio za komunikaciju s dužnosnicima.

Postoji algoritam koji se koristi za njegovu implementaciju. Shvatimo sljedeće.

Značajka algoritma Caesar Cipher

Ovaj algoritam sastoji se od nekoliko značajki koje su navedene u nastavku.

  • Ova tehnika je prilično jednostavna za primjenu enkripcije.
  • Svaki tekst zamjenjuje se fiksnim brojem položaja dolje ili gore s abecedom.
  • To je jednostavna vrsta zamjenske šifre.

Za definiranje svakog drugog teksta koji je pomaknut prema dolje potrebna je cjelobrojna vrijednost. Ova cjelobrojna vrijednost je također poznata kao pomak.

uvozni mrav

Možemo predstaviti ovaj koncept pomoću modularne aritmetike tako što ćemo najprije slovo pretvoriti u brojeve, prema shemi, A = 0, B = 1, C = 2, D = 3…….. Z = 25.

for petlja u c

Sljedeća matematička formula može se koristiti za pomicanje slova n.

Kako dešifrirati?

Dešifriranje je isto što i šifriranje. Možemo stvoriti funkciju koja će izvršiti pomak u suprotnom smjeru za dešifriranje izvornog teksta. Međutim, možemo koristiti cikličko svojstvo šifre ispod modula.

Šifra(n) = Dešifriranje(26-n)

Ista se funkcija može koristiti za dešifriranje. Umjesto toga, promijenit ćemo vrijednost pomaka tako da pomiče = 26 - pomak.

Cezarova šifra u Pythonu

Razumimo sljedeći primjer -

java boolean

Primjer -

 def encypt_func(txt, s): result = '' # transverse the plain txt for i in range(len(txt)): char = txt[i] # encypt_func uppercase characters in plain txt if (char.isupper()): result += chr((ord(char) + s - 64) % 26 + 65) # encypt_func lowercase characters in plain txt else: result += chr((ord(char) + s - 96) % 26 + 97) return result # check the above function txt = 'CEASER CIPHER EXAMPLE' s = 4 print('Plain txt : ' + txt) print('Shift pattern : ' + str(s)) print('Cipher: ' + encypt_func(txt, s)) 

Izlaz:

 Plain txt : CEASER CIPHER EXAMPLE Shift pattern : 4 Cipher: HJFXJWsHNUMJWsJCFRUQJ 

Gornji kod je prešao znak po znak. Prenosio je svaki znak prema pravilu ovisno o postupku šifriranja i dešifriranja teksta.

Definirali smo nekoliko specifičnih skupova pozicija koje su generirale šifrirani tekst.

Povreda u algoritmu Caesar Cipher

Šifrirani tekst možemo hakirati na razne načine. Jedan od načina je Tehnika grube sile, što uključuje isprobavanje svih mogućih ključeva za dešifriranje. Ova tehnika nije tako teška i ne zahtijeva puno truda.

Razumimo sljedeći primjer.

Primjer -

 msg = &apos;rGMTLIVrHIQSGIEWIVGIEWIV&apos; #encrypted msg LETTERS = &apos;ABCDEFGHIJKLMNOPQRSTUVWXYZ&apos; for k in range(len(LETTERS)): transformation = &apos;&apos; for s in msg: if s in LETTERS: n = LETTERS.find(s) n = n - k if n <0: n="n" + len(letters) transformation="transformation" letters[n] else: s print('hacking k #%s: %s' % (k, transformation)) < pre> <p> <strong>Output:</strong> </p> <pre> Hacking k #25: rHNUMJWrIJRTHJFXJWHJFXJW </pre> <h2>Transposition Cipher</h2> <p>Transposition cipher algorithm is a technique where the alphabet order in the plaintext is rearranged to form a cipher text. This algorithm doesn&apos;t support the actual plain text alphabets.</p> <p>Let&apos;s understand this algorithm using an example.</p> <p> <strong>Example -</strong> </p> <p>We will take the simple example called columnar transposition cipher where we write the each character in the pain text in horizontal with specified alphabet width. The vertically written texts are cipher, which create a completely unlike cipher text.</p> <p>Let&apos;s take a plain text, and apply the simple columnar transposition technique as shown below.</p> <img src="//techcodeview.com/img/python-tutorial/89/caesar-cipher-python-2.webp" alt="Caesar Cipher in Python"> <p>We placed the plain text horizontally and the cipher text is created with vertical format as: <strong>hotnejpt.lao.lvi.</strong> To decrypt this, the receiver must use the same table to decrypt the cipher text to plain text.</p> <p> <strong>Code -</strong> </p> <p>Let&apos;s understand the following example.</p> <pre> def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = &apos;&apos; for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode(&apos;3214&apos;, &apos;HELLO&apos;)) </pre> <p> <strong>Explanation -</strong> </p> <p>In the above code, we have created a function named <strong>split_len(),</strong> which spitted the pain text character, placed in columnar or row format.</p> <p>The <strong>encode()</strong> method created the cipher text with a key specifying the number of columns, and we have printed each cipher text by reading through each column.</p> <h4>Note - The transposition technique is meant to be a significant improvement in crypto security. Cryptanalyst observed that re-encrypting the cipher text using same transposition cipher shows better security.</h4> <hr></0:>

Transpozicijska šifra

Transpozicijski šifrirani algoritam je tehnika u kojoj se redoslijed abecede u otvorenom tekstu preuređuje kako bi se formirao šifrirani tekst. Ovaj algoritam ne podržava stvarne abecede običnog teksta.

popis država

Razumimo ovaj algoritam koristeći primjer.

Primjer -

Uzet ćemo jednostavan primjer koji se zove stupna transpozicijska šifra gdje pišemo svaki znak u tekstu boli vodoravno s određenom širinom abecede. Okomito pisani tekstovi su šifrirani, koji stvaraju potpuno drugačiji šifrirani tekst.

Uzmimo običan tekst i primijenimo jednostavnu tehniku ​​transponiranja stupaca kao što je prikazano u nastavku.

Cezarova šifra u Pythonu

Postavili smo obični tekst vodoravno, a šifrirani tekst je stvoren u okomitom formatu kao: hotnejpt.lao.lvi. Da bi to dešifrirao, primatelj mora koristiti istu tablicu za dešifriranje šifriranog teksta u čisti tekst.

git povuci izvorni master

Šifra -

Razumimo sljedeći primjer.

 def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = &apos;&apos; for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode(&apos;3214&apos;, &apos;HELLO&apos;)) 

Objašnjenje -

U gornjem kodu stvorili smo funkciju pod nazivom split_len(), koji je ispljunuo lik teksta boli, postavljen u format stupca ili retka.

The kodirati() metoda je stvorila šifrirani tekst s ključem koji specificira broj stupaca, a mi smo ispisali svaki šifrirani tekst čitajući svaki stupac.

Napomena - tehnika transpozicije trebala bi značajno poboljšati kripto sigurnost. Kriptoanalitičar je primijetio da ponovno šifriranje teksta šifre korištenjem iste transpozicijske šifre pokazuje bolju sigurnost.