logo

Шифр Цезаря в Python

У цьому підручнику ми розглянемо один із методів шифрування під назвою «Шифр Цезаря». Це частина криптографії.

вступ

У цій техніці кожен символ замінюється літерою на певну фіксовану позицію цифри, яка стоїть після або перед алфавітом. Наприклад, алфавіт B замінено на дві позиції нижче D. D перетвориться на F і так далі. Цей метод названий на честь популярних фрикційних персонажів Юлія Цезаря, який використовував його для спілкування з чиновниками.

Для його реалізації існує певний алгоритм. Розберемося в наступному.

Особливість алгоритму шифру Цезаря

Цей алгоритм складається з кількох функцій, наведених нижче.

  • Ця техніка досить проста у застосуванні шифрування.
  • Кожен текст замінюється фіксованим номером позиції вниз або вгору з алфавітом.
  • Це простий тип замінного шифру.

Існує ціле значення, необхідне для визначення кожного останнього тексту, який було переміщено вниз. Це ціле значення також відоме як зсув.

скасувати останню фіксацію

Ми можемо представити цю концепцію за допомогою модульної арифметики, спочатку перетворивши букву в числа відповідно до схеми, A = 0, B = 1, C = 2, D = 3…….. Z = 25.

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

Як розшифрувати?

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

генерувати випадкове число в java

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

Цю ж функцію можна використовувати для дешифрування. Замість цього ми змінимо значення зсуву таким чином, щоб shifts = 26 - зміна.

Шифр Цезаря в Python

Давайте розберемо такий приклад -

приклад -

програма java hello
 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 

Наведений вище код обходив символ за раз. Він передавав кожен символ за правилом залежно від процедури шифрування та дешифрування тексту.

Ми визначили кілька конкретних наборів позицій, які генерують зашифрований текст.

Порушення в алгоритмі шифру Цезаря

Ми можемо зламати зашифрований текст різними способами. Один із способів Техніка грубої сили, що передбачає спробу всіх можливих ключів дешифрування. Ця техніка не така складна і не вимагає великих зусиль.

Давайте розберемося в наступному прикладі.

приклад -

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

Шифр транспозиції

Алгоритм транспозиційного шифрування — це техніка, за якої алфавітний порядок у відкритому тексті змінюється для формування зашифрованого тексту. Цей алгоритм не підтримує справжні алфавіти звичайного тексту.

регулярний вираз у 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 кодувати() метод створив зашифрований текст із ключем, що вказує кількість стовпців, і ми надрукували кожен зашифрований текст, прочитавши кожен стовпець.

Примітка. Техніка транспонування призначена для значного покращення криптозахисту. Криптоаналітики помітили, що повторне шифрування зашифрованого тексту за допомогою того самого шифру транспозиції демонструє кращу безпеку.