logo

Szyfr Cezara w Pythonie

W tym samouczku omówimy jedną z metod szyfrowania zwaną szyfrem Cezara. Jest częścią kryptografii.

Wstęp

W tej technice każdy znak jest zastępowany literą o ustalonej pozycji numerycznej, znajdującej się później lub przed alfabetem. Na przykład - Alfabet B zostanie zastąpiony dwiema pozycjami w dół D. D stanie się F i tak dalej. Nazwa tej metody pochodzi od popularnych postaci Juliusza Cezara, którzy używali jej do komunikowania się z urzędnikami.

Istnieje algorytm służący do jego implementacji. Rozumiemy, co następuje.

Cecha algorytmu szyfru Cezara

Algorytm ten składa się z kilku cech podanych poniżej.

  • Ta technika jest dość prosta w zastosowaniu szyfrowania.
  • Każdy tekst jest zastępowany stałą liczbą pozycji w dół lub w górę alfabetu.
  • Jest to prosty rodzaj szyfru zastępczego.

Do zdefiniowania każdego ostatniego fragmentu tekstu, który został przesunięty w dół, wymagana jest wartość całkowita. Ta wartość całkowita jest również nazywana przesunięciem.

policz różne sql

Możemy przedstawić tę koncepcję za pomocą arytmetyki modułowej, zamieniając najpierw literę na liczby, zgodnie ze schematem, A = 0, B = 1, C = 2, D = 3….. Z = 25.

Do przesunięcia n litery można zastosować następujący wzór matematyczny.

emoji iPhone'a na telefonie z Androidem

Jak odszyfrować?

Deszyfrowanie jest takie samo jak szyfrowanie. Możemy stworzyć funkcję, która dokona przesunięcia w przeciwną ścieżkę, aby odszyfrować oryginalny tekst. Możemy jednak skorzystać z właściwości cyklicznej szyfru pod modułem.

Szyfr(n) = Rozszyfrowanie(26-n)

Tej samej funkcji można użyć do odszyfrowania. Zamiast tego zmodyfikujemy wartość przesunięcia w taki sposób, że shifts = 26 - zmiana.

Szyfr Cezara w Pythonie

Rozumiemy następujący przykład -

Przykład -

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

Wyjście:

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

Powyższy kod przechodził przez znak na raz. Przesłał każdy znak zgodnie z regułą zależną od procedury szyfrowania i deszyfrowania tekstu.

oops, koncepcja w Javie

Zdefiniowaliśmy kilka konkretnych zestawów pozycji, które wygenerowały tekst zaszyfrowany.

Naruszenie algorytmu szyfru Cezara

Możemy zhakować zaszyfrowany tekst na różne sposoby. Jednym ze sposobów jest Technika Brutalnej Siły, co wiąże się z wypróbowaniem każdego możliwego klucza deszyfrującego. Technika ta nie jest trudna i nie wymaga dużego wysiłku.

Rozumiemy następujący przykład.

Przykład -

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

Szyfr transpozycyjny

Algorytm szyfru transpozycyjnego to technika polegająca na zmianie kolejności alfabetu w tekście jawnym w celu utworzenia tekstu zaszyfrowanego. Algorytm ten nie obsługuje rzeczywistych alfabetów zwykłego tekstu.

przecena za pomocą obrazów

Rozumiemy ten algorytm na przykładzie.

Przykład -

Dołącz ciąg Java

Weźmiemy prosty przykład zwany szyfrem transpozycji kolumnowej, w którym każdy znak w tekście bólu piszemy poziomo z określoną szerokością alfabetu. Teksty zapisane pionowo są szyframi, które tworzą zupełnie inny tekst zaszyfrowany.

Weźmy zwykły tekst i zastosujmy prostą technikę transpozycji kolumnowej, jak pokazano poniżej.

Szyfr Cezara w Pythonie

Umieściliśmy zwykły tekst poziomo, a tekst zaszyfrowany został utworzony w formacie pionowym jako: hotnejpt.lao.lvi. Aby to odszyfrować, odbiorca musi użyć tej samej tabeli do odszyfrowania tekstu zaszyfrowanego na zwykły tekst.

Kod -

Rozumiemy następujący przykład.

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

Wyjaśnienie -

W powyższym kodzie utworzyliśmy funkcję o nazwie split_len(), który wypluwał znak tekstu bólu, umieszczony w formacie kolumnowym lub wierszowym.

The kodować() metoda utworzyła zaszyfrowany tekst z kluczem określającym liczbę kolumn i wydrukowaliśmy każdy zaszyfrowany tekst, czytając każdą kolumnę.

Uwaga – technika transpozycji ma na celu znaczną poprawę bezpieczeństwa kryptograficznego. Kryptoanalityk zauważył, że ponowne szyfrowanie tekstu zaszyfrowanego przy użyciu tego samego szyfru transpozycyjnego zapewnia większe bezpieczeństwo.