Шифрование строки python по ключу

Шифрование сообщений в Python. От простого к сложному. Шифр Цезаря

Мне, лично, давно была интересна тема шифрования информации, однако, каждый раз погрузившись в эту тему, я осознавал насколько это сложно и понял, что лучше начать с чего-то более простого. Я, лично, планирую написать некоторое количество статей на эту тему, в которых я покажу вам различные алгоритмы шифрования и их реализацию в Python, продемонстрирую и разберу свой проект, созданный в этом направлении. Итак, начнем.

Для начала, я бы хотел рассказать вам какие уже известные алгоритмы мы рассмотрим, в моих статьях. Список вам представлен ниже:

  • Шифр Цезаря
  • Шифр Виженера
  • Шифр замены
  • Омофонический шифр
  • RSA шифрование

Шифр Цезаря

Итак, после небольшого введения в цикл, я предлагаю все-таки перейти к основной теме сегодняшней статьи, а именно к Шифру Цезаря.

Что это такое?

Шифр Цезаря — это простой тип подстановочного шифра, где каждая буква обычного текста заменяется буквой с фиксированным числом позиций вниз по алфавиту. Принцип его действия можно увидеть в следующей иллюстрации:

Какими особенностями он обладает?

У Шифра Цезаря, как у алгоритма шифрования, я могу выделить две основные особенности. Первая особенность — это простота и доступность метода шифрования, который, возможно поможет вам погрузится в эту тему, вторая особенность — это, собственно говоря, сам метод шифрования.

Программная реализация

В интернете существует огромное множество уроков, связанных с криптографией в питоне, однако, я написал максимально простой и интуитивно понятный код, структуру которого я вам продемонстрирую.

Начнем, пожалуй, с создания алфавита. Для этого вы можете скопировать приведенную ниже строку или написать все руками.

alfavit = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' # Создаем алфавит

Далее, нам нужно обозначить программе шаг, то есть смещение при шифровании. Так, например, если мы напишем букву «а» в сообщении, тот при шаге «2», программа выведет нам букву «в».

Итак, создаем переменную smeshenie, которая будет вручную задаваться пользователем, и message, куда будет помещаться наше сообщение, и, с помощью метода upper(), возводим все символы в нашем сообщении в верхний регистр, чтобы у нас не было ошибок. Потом создаем просто пустую переменную itog, куда мы буем выводить зашифрованное сообщение. Для этого пишем следующее:

smeshenie = int(input('Шаг шифровки: ')) #Создаем переменную с шагом шифровки message = input("Сообщение для шифровки: ").upper() #создаем переменнную, куда запишем наше сообщение itog = '' #создаем переменную для вывода итогового сообщения

Итак, теперь переходим к самому алгоритму шифровки. Первым делом создаем цикл for , где мы определим место букв, задействованных в сообщении, в нашем списке alfavit, после чего определяем их новые места (далее я постараюсь насытить код с пояснениями):

for i in message: mesto = alfavit.find(i) #Вычисляем места символов в списке new_mesto = mesto + smeshenie #Сдвигаем символы на указанный в переменной smeshenie шаг

Далее, мы создаем внутри нашего цикла условие if , в нем мы записываем в список itog мы записываем наше сообщение уже в зашифрованном виде и выводим его:

for i in message: mesto = alfavit.find(i) new_mesto = mesto + smeshenie if i in alfavit: itog += alfavit[new_mesto] # Задаем значения в итог else: itog += i print (itog) 

Модернизация

Читайте также:  Java 64 bit x86

Вот мы и написали программу, однако она имеет очень большой недостаток: «При использовании последних букв(русских), программа выведет вам английские буквы. Давайте это исправим.

Для начала создадим переменную lang, в которой будем задавать язык нашего шифра, а так же разделим английский и русский алфавиты.

alfavit_EU = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ' alfavit_RU = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' smeshenie = int(input('Шаг шифровки: ')) message = input("Сообщение для шифровки: ").upper() itog = '' lang = input('Выберите язык RU/EU: ') #Добавляем возможность выбора языка

Теперь нам надо создать условие, которое проверит выбранный язык и применит его, то есть обратится к нужному нам алфавиту. Для этого пишем само условие и добавляем алгоритм шифрования, с помощью которого будет выполнено шифрование:

if lang == 'RU': for i in message: mesto = alfavit_RU.find(i) # Алгоритм для шифрования сообщения на русском new_mesto = mesto + smeshenie if i in alfavit_RU: itog += alfavit_RU[new_mesto] else: itog += i else: for i in message: mesto = alfavit_EU.find(i) # Алгоритм для шифрования сообщения на английском new_mesto = mesto + smeshenie if i in alfavit_EU: itog += alfavit_EU[new_mesto] else: itog += i 

Дешифровка сообщения

Возможно это прозвучит несколько смешно, но мы смогли только зашифровать сообщение, а насчет его дешифровки мы особо не задумывались, но теперь дело дошло и до неё.

По сути, дешифровка — это алгоритм обратный шифровке. Давайте немного переделаем наш код (итоговый вид вы можете увидеть выше).

Для начала, я предлагаю сделать «косметическую» часть нашей переделки. Для этого перемещаемся в самое начало кода:

alfavit = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' smeshenie = int(input('Шаг шифровки: ')) message = input("Сообщение для ДЕшифровки: ").upper() #заменяем слово шифровка, на дешифровка itog = ''

Остальное можно оставить так же, но если у вас есть желание, то можете поменять названия переменных.

По большому счету, самые ‘большие’ изменения у нас произойдут в той части кода, где у нас находится алгоритм, где нам нужно просто поменять знак «+» на знак «-«. Итак, переходим к самому циклу:

if lang == 'RU': for i in message: mesto = alfavit_RU.find(i) new_mesto = mesto + smeshenie # Меняем знак + на знак - if i in alfavit_RU: itog += alfavit_RU[new_mesto] else: itog += i else: for i in message: mesto = alfavit_EU.find(i) # Меняем знак + на знак - new_mesto = mesto + smeshenie if i in alfavit_EU: itog += alfavit_EU[new_mesto] else: itog += i

Итоговый вид программы

Итак, вот мы и написали простейшую программу для шифрования методом Цезаря. Ниже я размещу общий вид программы без моих комментариев, чтобы вы еще раз смогли сравнить свою программу с моей:

alfavit_EU = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ' alfavit_RU = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' smeshenie = int(input('Шаг шифровки: ')) message = input("Сообщение для ДЕшифровки: ").upper() itog = '' lang = input('Выберите язык RU/EU: ') if lang == 'RU': for i in message: mesto = alfavit_RU.find(i) new_mesto = mesto + smeshenie if i in alfavit_RU: itog += alfavit_RU[new_mesto] else: itog += i else: for i in message: mesto = alfavit_EU.find(i) new_mesto = mesto + smeshenie if i in alfavit_EU: itog += alfavit_EU[new_mesto] else: itog += i print (itog) 

Итог

Вы успешно написали алгоритм шифровки и дешифровки сообщения на Python с помощью метода Цезаря. В следующей статье мы с вами рассмотрим Шифр Виженера, а также разберем его реализацию на Python, а пока я предлагаю вам написать в комментариях варианты модернизации программы(код или просо предложения и пожелания). Я обязательно учту ваше мнение.

Читайте также:  Php вырезать до знака

Источник

Шифровать строку Python

Шифровать строку Python

  1. Используйте Simple Crypt для шифрования строки в Python
  2. Используйте библиотеку cryptocode для шифрования строки в Python
  3. Используйте пакет Cryptography для шифрования строки в Python
  4. Используйте алгоритм RSA для шифрования строки в Python

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

В этой статье будут обсуждаться различные методы, которые вы можете использовать для шифрования строки в Python.

Используйте Simple Crypt для шифрования строки в Python

Использование модуля Simple Crypt — это самый быстрый и простой способ добиться процесса шифрования для Python 2.7 и 3. Этот метод преобразует открытый текст в зашифрованный текст за секунды с помощью одной строчки кода.

Модуль PyCrypto предоставляет реализацию алгоритма для этой библиотеки и использует шифр AES256 . Этот метод включает проверку HMAC с помощью шифра SHA256 для уведомления об изменении или модификации зашифрованного текста.

Simple Crypt имеет две функции: encrypt и decrypt . Чтобы использовать обе эти функции, необходимо установить модули pycrypto и simplecrypt.

Следующий код использует simplecrypt для шифрования строки в Python:

from simplecrypt import encrypt, decrypt passkey = 'wow' str1 = 'I am okay' cipher = encrypt(passkey, str1) print(cipher) 

Результатом этого кода будет кластер случайных букв.

Для декодирования / дешифрования зашифрованного текста мы будем использовать следующую команду:

Используйте библиотеку cryptocode для шифрования строки в Python

Термин cryptocode — это простая библиотека, которая позволяет нам безопасно и просто шифровать и расшифровывать строки в Python 3 или выше. Помните, что эту библиотеку необходимо установить вручную; это можно сделать с помощью команды pip .

Программа ниже использует библиотеку cryptocode для шифрования строки в Python:

import cryptocode  str_encoded = cryptocode.encrypt("I am okay","wow") ## And then to decode it: str_decoded = cryptocode.decrypt(str_encoded, "wow") print(str_decoded) 

Первым параметром функции будет строка, которую необходимо зашифровать. Второй параметр должен быть ключом, который будет использоваться для расшифровки.

Используйте пакет Cryptography для шифрования строки в Python

Cryptography — это пакет Python, который можно использовать для шифрования с симметричным ключом. Шифрование с симметричным ключом — это способ использования одного и того же ключа для процесса кодирования и декодирования.

Читайте также:  Html css основы кратко

Для использования этого метода шифрования необходимо установить библиотеку Cryptography ; это можно сделать с помощью команды pip .

Следующий код использует функции пакета cryptography для шифрования строки в Python:

from cryptography.fernet import Fernet  str1 = "I am okay" key = Fernet.generate_key()  fernet = Fernet(key)  enctex = fernet.encrypt(str1.encode())  dectex = fernet.decrypt(enctex).decode()  print("The primordial string: ", str1) print("The Encrypted message: ", enctex) print("The Decrypted message: ", dectex) 
The primordial string: I am okay The Encrypted message: The Decrypted message: I am okay 

В приведенном выше коде мы импортируем Fernet из модуля cryptography.fernet . Затем мы генерируем ключ шифрования, который будет использоваться как для кодирования, так и для целей декодирования. Экземпляр класса Fernet создается с ключом шифрования. Затем строка шифруется экземпляром Fernet. Наконец, он расшифровывается с помощью экземпляра класса Fernet.

Шифрование с симметричным ключом — это простой способ шифрования строки. Единственный недостаток в том, что он сравнительно менее безопасен. Любой, у кого есть ключ, может прочитать зашифрованный текст.

Используйте алгоритм RSA для шифрования строки в Python

Алгоритм RSA в Python реализует шифрование с асимметричным ключом. Шифрование с асимметричным ключом использует два разных ключа для процесса шифрования и дешифрования.

Эти два ключа — Закрытый ключ и Открытый ключ. Открытый ключ является открытым и используется в процессе шифрования. Любой, у кого есть открытый ключ, может зашифровать и отправить данные; закрытый ключ есть только у получателя. Кроме того, кто-то, имеющий к нему доступ, также может расшифровать данные.

Для использования этого метода сначала необходимо установить библиотеку rsa . Вы можете использовать общую команду pip для установки этой библиотеки.

Следующий код использует алгоритм RSA для шифрования строки в Python:

import rsa  pubkey, privkey = rsa.newkeys(512)  str1 = "I am okay"  enctex = rsa.encrypt(str1.encode(),pubkey)  dectex = rsa.decrypt(enctex, privkey).decode() print("The primordial string: ", str1) print("The Encrypted message: ", enctex) print("The Decrypted message: ", dectex) 
The primordial string: I am okay The Encrypted message: The Decrypted message: I am okay 

В приведенном выше коде импортируется модуль rsa , а открытый и закрытый ключи генерируются с помощью функции rsa.newkeys() . Затем строка шифруется с помощью открытого ключа. Затем строку можно расшифровать, используя только закрытый ключ. Открытый и закрытый ключи в этой программе — pubkey и privkey соответственно.

Шифрование с асимметричным ключом обеспечивает лучшую безопасность, чем шифрование с симметричным ключом. Как и в первом случае, конкретный закрытый ключ доступен только получателю и используется для дешифрования. В то время как в последнем существует только один ключ, что делает процесс дешифрования более простым и менее защищенным от атак третьих лиц в середине между отправителем и получателем.

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

Сопутствующая статья — Python String

Источник

Оцените статью