logo

Cezarjeva šifra v Pythonu

V tej vadnici bomo raziskali eno od metod šifriranja, imenovano Caesar Cipher. Je del kriptografije.

Uvod

Pri tej tehniki je vsak znak nadomeščen s črko na določeni fiksni številki, ki je za abecedo ali pred njo. Na primer - abeceda B je nadomeščena z dvema položajema navzdol D. D bi postal F in tako naprej. Ta metoda je dobila ime po priljubljenih frikcijskih likih Juliju Cezarju, ki jo je uporabljal za komunikacijo z uradniki.

Za njegovo izvedbo se uporablja algoritem. Razumejmo naslednje.

Značilnost algoritma Caesar Cipher

Ta algoritem je sestavljen iz nekaj funkcij, ki so navedene spodaj.

  • Ta tehnika je precej preprosta za uporabo šifriranja.
  • Vsako besedilo se nadomesti s fiksno številko položaja navzdol ali navzgor z abecedo.
  • Je preprosta vrsta nadomestne šifre.

Za definiranje vsakega slednjega besedila, ki je bilo premaknjeno navzdol, je potrebna celoštevilska vrednost. Ta celoštevilska vrednost je znana tudi kot premik.

zamenjaj iz niza v Javi

Ta koncept lahko predstavimo z uporabo modularne aritmetike tako, da črko najprej pretvorimo v številke v skladu s shemo, A = 0, B = 1, C = 2, D = 3…….. Z = 25.

mylivecricket za kriket v živo

Za premik črke n lahko uporabite naslednjo matematično formulo.

Kako dešifrirati?

Dešifriranje je enako kot šifriranje. Ustvarimo lahko funkcijo, ki bo dosegla premik v nasprotni smeri za dešifriranje izvirnega besedila. Lahko pa uporabimo ciklično lastnost šifre pod modulom.

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

Isto funkcijo lahko uporabite za dešifriranje. Namesto tega bomo spremenili vrednost premika tako, da bo premik = 26 - premik.

Cezarjeva šifra v Pythonu

Razumejmo naslednji primer -

program v java

Primer -

 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)) 

Izhod:

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

Zgornja koda je prečkala znak naenkrat. Vsak znak je prenesel po pravilu glede na postopek šifriranja in dešifriranja besedila.

Določili smo nekaj specifičnih nizov položajev, ki so ustvarili šifrirano besedilo.

Kršitev algoritma Caesar Cipher

Šifrirano besedilo lahko vdremo na različne načine. Eden od načinov je Tehnika surove sile, kar vključuje preizkušanje vseh možnih ključev za dešifriranje. Ta tehnika ni tako težka in ne zahteva veliko truda.

Razumejmo naslednji primer.

Primer -

 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 šifrirni algoritem je tehnika, pri kateri se vrstni red abecede v odprtem besedilu preuredi, da se oblikuje šifrirano besedilo. Ta algoritem ne podpira dejanskih abeced navadnega besedila.

ukaz sed

Razumejmo ta algoritem na primeru.

Primer -

Vzeli bomo preprost primer, imenovan stolpčna transpozicijska šifra, kjer vsak znak v besedilu bolečine zapišemo vodoravno z določeno abecedno širino. Navpično pisana besedila so šifrirana, ki ustvarjajo popolnoma drugačno šifrirano besedilo.

Vzemimo golo besedilo in uporabimo preprosto tehniko prenosa stolpcev, kot je prikazano spodaj.

Cezarjeva šifra v Pythonu

Golo besedilo smo postavili vodoravno, šifrirano besedilo pa je ustvarjeno v navpičnem formatu kot: hotnejpt.lao.lvi. Za dešifriranje tega mora prejemnik uporabiti isto tabelo za dešifriranje šifriranega besedila v golo besedilo.

gimp izvozi kot jpg

Koda -

Razumejmo naslednji primer.

 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;)) 

Pojasnilo -

V zgornji kodi smo ustvarili funkcijo z imenom split_len(), ki je izpljunil znak bolečine, postavljen v obliki stolpcev ali vrstic.

The kodiraj() metoda je ustvarila šifrirano besedilo s ključem, ki določa število stolpcev, vsako šifrirano besedilo pa smo natisnili tako, da smo prebrali vsak stolpec.

Opomba – Tehnika prenosa naj bi znatno izboljšala kripto varnost. Kriptoanalitik je opazil, da ponovno šifriranje šifriranega besedila z uporabo iste transpozicijske šifre kaže boljšo varnost.