Как работает шифрование и дешифрование строки python
Для шифрования исходный текст (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()
Есть ряд библиотек, позволяющие нам шифровать данные на 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
- внутренний размер блока алгоритма хеширования в байтах.
Более подробно можете ознакомиться в документации.