logo

Шифър на Цезар в Python

В този урок ще разгледаме един от методите за криптиране, наречен Caesar Cipher. Това е част от криптографията.

Въведение

При тази техника всеки знак се замества с буква на определена фиксирана позиция, която е по-късно или преди азбуката. Например - азбука B се заменя с две позиции надолу D. D ще стане F и така нататък. Този метод е кръстен на популярни фрикционни герои Юлий Цезар, които го използват за комуникация с официални лица.

Има алгоритъм, използван за изпълнението му. Нека разберем следното.

Характеристика на алгоритъма на Caesar Cipher

Този алгоритъм се състои от няколко функции, които са дадени по-долу.

  • Тази техника е доста проста за прилагане на криптиране.
  • Всеки текст се заменя с фиксиран номер на позиция надолу или нагоре с азбуката.
  • Това е прост тип заместващ шифър.

Необходима е целочислена стойност, за да се дефинира всеки последен текст, който е преместен надолу. Тази целочислена стойност е известна още като отместване.

сравнима java

Можем да представим тази концепция с помощта на модулна аритметика, като първо преобразуваме буквата в числа, според схемата, A = 0, B = 1, C = 2, D = 3…….. Z = 25.

Следната математическа формула може да се използва за изместване на n буква.

Как да декриптирате?

Дешифрирането е същото като криптирането. Можем да създадем функция, която ще извърши преместване в обратната посока, за да дешифрира оригиналния текст. Можем обаче да използваме цикличното свойство на шифъра под модула.

while и do while цикъл в java

Шифър(n) = Дешифриране(26-n)

Същата функция може да се използва за дешифриране. Вместо това ще променим стойността на shift, така че shifts = 26 - смяна.

Шифър на Цезар в Python

Нека разберем следния пример -

пример -

низ към булева java
 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)) 

Изход:

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

Горният код е обходил символа по едно и също време. Той прехвърля всеки символ според правилото в зависимост от процедурата за криптиране и декриптиране на текста.

Дефинирахме няколко специфични набора от позиции, които генерират шифрован текст.

Пробив в алгоритъма на Caesar Cipher

Можем да хакнем шифрования текст по различни начини. Един от начините е Техника на груба сила, което включва изпробване на всеки възможен ключ за дешифриране. Тази техника не е толкова трудна и не изисква много усилия.

Нека разберем следния пример.

пример -

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

Шифър за транспониране

Алгоритъмът за транспониране на шифър е техника, при която азбучният ред в обикновения текст се пренарежда, за да образува шифрован текст. Този алгоритъм не поддържа действителните азбуки на обикновен текст.

арийски хан

Нека разберем този алгоритъм с помощта на пример.

пример -

Ще вземем простия пример, наречен шифър на колонно транспониране, където пишем всеки знак в текста на болката хоризонтално с определена ширина на азбуката. Вертикално написаните текстове са шифровани, които създават напълно различен шифрован текст.

Нека вземем обикновен текст и приложим простата техника за колонно транспониране, както е показано по-долу.

какво е const в java
Шифър на Цезар в Python

Поставихме обикновения текст хоризонтално и шифрованият текст се създава с вертикален формат като: hotnejpt.lao.lvi. За да дешифрира това, приемникът трябва да използва същата таблица, за да дешифрира шифрования текст в обикновен текст.

код -

Нека разберем следния пример.

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

Обяснение -

В горния код създадохме функция с име split_len(), който изплюва текстовия знак за болка, поставен в колонен или редов формат.

The кодирам () метод създаде шифрования текст с ключ, указващ броя на колоните, и ние отпечатахме всеки шифрован текст, като прочетохме всяка колона.

Забележка – Техниката на транспониране е предназначена да бъде значително подобрение в крипто сигурността. Криптоаналитикът отбеляза, че повторното криптиране на шифрования текст с помощта на същия шифър за транспониране показва по-добра сигурност.