logo

Caesarova šifra v Pythonu

V tomto tutoriálu prozkoumáme jednu z metod šifrování zvanou Caesarova šifra. Je součástí kryptografie.

Úvod

V této technice je každý znak nahrazen písmenem na určité pevné pozici čísla, které je později nebo před abecedou. Například - Abeceda B je nahrazena o dvě pozice níže D. D by se stalo F a tak dále. Tato metoda je pojmenována po populárních třecích postavách Julia Caesara, který ji používal ke komunikaci s úředníky.

K jeho implementaci se používá algoritmus. Pojďme pochopit následující.

Funkce Caesarova šifrovacího algoritmu

Tento algoritmus se skládá z několika funkcí, které jsou uvedeny níže.

  • Tato technika je poměrně jednoduchá na použití šifrování.
  • Každý text je nahrazen pevným číslem pozice dolů nebo nahoru s abecedou.
  • Jde o jednoduchý typ zástupné šifry.

K definování každého druhého textu, který byl posunut dolů, je vyžadována celočíselná hodnota. Tato celočíselná hodnota je také známá jako posun.

co je myspace

Tento koncept můžeme znázornit pomocí modulární aritmetiky tak, že nejprve písmeno převedeme na čísla podle schématu, A = 0, B = 1, C = 2, D = 3…….. Z = 25.

K posunutí n písmene lze použít následující matematický vzorec.

Jak dešifrovat?

Dešifrování je stejné jako šifrování. Můžeme vytvořit funkci, která provede posun v opačné cestě k dešifrování původního textu. Můžeme však použít cyklickou vlastnost šifry pod modulem.

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

Stejnou funkci lze použít pro dešifrování. Místo toho upravíme hodnotu posunu tak, že posuneme = 26 - směna.

binární strom inorder traversal
Caesarova šifra v Pythonu

Pojďme pochopit následující příklad -

Příklad -

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

Výstup:

nerovná se mysql
 Plain txt : CEASER CIPHER EXAMPLE Shift pattern : 4 Cipher: HJFXJWsHNUMJWsJCFRUQJ 

Výše uvedený kód procházel znakem v čase. Přenesl každý znak podle pravidla v závislosti na postupu šifrování a dešifrování textu.

Definovali jsme několik konkrétních sad pozic, které generovaly šifrovaný text.

Porušení algoritmu Caesarovy šifry

Šifrovaný text můžeme hacknout různými způsoby. Jedním ze způsobů je Technika hrubé síly, což zahrnuje zkoušení všech možných dešifrovacích klíčů. Tato technika není tak náročná a nevyžaduje mnoho úsilí.

Pojďme pochopit následující příklad.

Příklad -

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

Transpoziční šifra

Transpoziční šifrovací algoritmus je technika, kde je abecední pořadí v otevřeném textu přeskupeno tak, aby vytvořilo šifrovaný text. Tento algoritmus nepodporuje skutečné abecedy prostého textu.

databáze

Pojďme pochopit tento algoritmus na příkladu.

Příklad -

Vezmeme si jednoduchý příklad nazvaný sloupcová transpoziční šifra, kde zapíšeme každý znak v textu bolesti vodorovně se zadanou šířkou abecedy. Vertikálně psané texty jsou šifrové, což vytváří zcela odlišný šifrový text.

názvy měst usa

Vezměme prostý text a použijeme jednoduchou techniku ​​sloupcové transpozice, jak je uvedeno níže.

Caesarova šifra v Pythonu

Čistý text jsme umístili vodorovně a šifrovaný text je vytvořen ve vertikálním formátu jako: hotnejpt.lao.lvi. K dešifrování musí příjemce použít stejnou tabulku k dešifrování šifrovaného textu na prostý text.

Kód -

Pojďme pochopit následující příklad.

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

Vysvětlení -

Ve výše uvedeném kódu jsme vytvořili funkci s názvem split_jen(), který vyplivl textový znak bolesti, umístěný ve sloupcovém nebo řádkovém formátu.

The zakódovat() metoda vytvořila šifrovaný text s klíčem určujícím počet sloupců a každý šifrovaný text jsme vytiskli čtením každého sloupce.

Poznámka - Technika transpozice má znamenat významné zlepšení zabezpečení kryptoměn. Cryptanalyst poznamenal, že opětovné zašifrování šifrovaného textu pomocí stejné transpoziční šifry ukazuje lepší zabezpečení.