DevGang
Авторизоваться

Криптография в Python - пошаговая реализация 

Хотите попробовать криптографию на Python? В детстве я любил читать книги о том, как зашифровать и расшифровать секретные сообщения. Итак, я предлагаю вам несколько интересных реализаций криптографии на Python. Давайте начнем.

Что такое криптография?

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

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

Эти алгоритмы генерируют криптографические ключи, цифровую подпись, аутентификацию для защиты данных, просмотр веб-страниц в Интернете и конфиденциальные транзакции, такие как транзакции по кредитным и дебетовым картам.

Каковы особенности хороших алгоритмов криптографии?

  1. Конфиденциальность: информация доступна только предполагаемому пользователю и никому другому.
  2. Полнота: информация не может быть изменена между отправителем и предполагаемым получателем при хранении или передаче без какого-либо дополнения к обнаруживаемой информации.
  3. Не отклонение: в более поздний момент создатель / отправитель данных не отклоняет свое намерение отправить информацию.
  4. Аутентификация: подтверждает личность отправителя и получателя. Детали проверяются, а также место назначения / происхождения.

Типы криптографии

  1. Симметричный ключ: это схема шифрования, в которой отправитель и получатель сообщений используют один универсальный ключ для шифрования и дешифрования сообщений. Схемы с симметричным ключом быстрее и проще, но проблема в том, что для безопасного использования отправитель и получатель должны где-то поменять местами ключ. Метод шифрования данных (DE) - наиболее распространенная система шифрования с симметричным ключом.
  2. Функции хеширования: в этом алгоритме не используются никакие ключи. Хеш-значение фиксированной длины вычисляется в соответствии с обычным текстом, что затрудняет получение текстового содержимого. Хеш-функции используются многими операционными системами для шифрования паролей.
  3. Асимметричный ключ: информация зашифровывается и дешифруется с помощью пары ключей. Для шифрования используется открытый ключ, а для дешифрования - закрытый. Закрытый ключ и открытый ключ разделены. И если кто-то знает открытый ключ, предполагаемый получатель расшифрует его только потому, что он сам знает закрытый ключ.

Реализация криптографии на Python с FERNET

Фреймворк, который я впервые представлю сегодня, называется Fernet. Это метод шифрования с симметричным ключом.

1. Установите FERNET

Мы можем просто использовать Python pip для установки модуля FERNET в нашей системе:

pip install cryptography
from cryptography.fernet import Fernet

2. Создайте ключи шифрования.

Мы можем использовать функцию Фернет напрямую:

key = Fernet.generate_key()

Мы также можем создать свой собственный ключ, используя функцию random

import base64
import os

base64.urlsafe_b64encode(os.urandom(32))

А затем мы вызовем функцию FERNET с нашим key:

f = Fernet(key)

3. Шифрование ваших данных

Теперь мы готовы зашифровать наши данные:

token = f.encrypt(b"Meet me at 9pm. The bus stop. Bring the case.")
print(token)

Как видно из полученного токена:

b'gAAAAABfw08v4HVeS3X4WzIEU3NcIfGUCoFQ82XTNPSipSj0UGlYK8mljcDHzubXPN4yhyF3gAANzB5829rQ955GX-t52pg97DLnfhofJKLWvuGIAnUFRVKOfvQggn7VQPbaaciVkS1R'

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

4. Использование паролей для криптографии в Python

Мы также можем использовать определенные пароли вместо сохранения случайно сгенерированных токенов.

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

Они требуют принятия решений и глубокого знания действующих криптографических концепций.

Но следуйте приведенному ниже коду, и все будет в порядке:

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

Теперь мы указываем пароль и генерируем случайную последовательность байтов:

password = b"journaldev"
salt = os.urandom(16)
print(salt)

что дает нам:

b'\x12\x03\xb4\xeaN\xb0\x19\x98\x83\xb42\xe0\xa71\xfb\xd5'

Затем мы используем kdf для итерации 100k раз с использованием алгоритма хеширования, такого как SHA256, для получения ключа:

kdf = PBKDF2HMAC(algorithm=hashes.SHA256(),
                 length=32,
                 salt=salt,
                 iterations=100000,
                 )

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

key = base64.urlsafe_b64encode(kdf.derive(password))
print(key)

дает нам:

b'hjguwTLr2E2zIRHrI8a0dDXBSRel3YoKSx2uP5ruzX0='

5. Расшифровка текста

Как только получатель получит сообщение, расшифровать текст будет несложно. Итак, вы начинаете с ввода ключа в объект Fernet и используете функцию decrypt(), как показано ниже:

f = Fernet(#enter your key here)
f.decrypt(token)

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

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

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить