Как работает шифрование и дешифрование строки python

Аватар пользователя Ivan Mamtsev
Ivan Mamtsev
21 августа 2024

Для шифрования исходный текст (plain text) переводится в зашифрованный текст (ciphertext) с помощью алгоритма и ключа. Для дешифрования зашифрованный текст переводится обратно в исходный, используя тот же алгоритм и ключ. Основные инструменты это алгоритм шифрования, например, AES, RSA, ключ шифрования и сами функции для шифрования и дешифрования.

На практике же, мы можем использовать библиотеки как cryptography.

from cryptography.fernet import Fernet

key = Fernet.generate_key()
fernet = Fernet(key)

plain_text = 'python'
encrypted_text = fernet.encrypt(plain_text.encode())
decrypted_text = fernet.decrypt(encrypted_text).decode()
0 0
Аватар пользователя Игорь Гахов
Игорь Гахов
17 октября 2022

Есть ряд библиотек, позволяющие нам шифровать данные на Python, например cryptography:

from cryptography.fernet import Fernet

key = Fernet.generate_key()

f = Fernet(key)

token = f.encrypt(b"Это секретное сообщение.")  # шифрование данных
token
# ...
f.decrypt(token)  # дешифрование данных
'Это секретное сообщение.'

Подробнее можно почитать в документации библиотеки Cryptography.

Также можете обратить внимание на Simple Crypt, Cryptocode и RSA.


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

Конструкторы для алгоритмов хэширования, которые всегда присутствуют в этом модуле являются md5(), sha1(), sha224(), sha256(), sha384(), и sha512(). Если вам нужны хеш-функции adler32 или crc32, то они доступны в модуле zlib.

Пример:

import hashlib

hash = hashlib.sha256()

hash.update(b"Nobody inspects")
hash.update(b" the spammish repetition")

hash.hexdigest()  # '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406'
hash.digest_size  # 32
hash.block_size  # 64

Разберем строки:

1) hash.update() обновляет хеш-объект с помощью байтового объекта. Повторные вызовы эквивалентны одиночному вызову с объединением всех аргументов: m.update(a); m.update(b) эквивалентно m.update(a+b);

2) hash.hexdigest() возвращает дайджест как значение строки шестнадцатеричных данных;

3) hash.digest_size - размер полученного хеша в байтах;

4) hash.block_size - внутренний размер блока алгоритма хеширования в байтах.

Более подробно можете ознакомиться в документации.

0 0