Я должен зашифровать строку с помощью ключа и сохранить зашифрованный объект как строку, он должен быть надежным, поэтому я решил использовать модуль, обеспечивающий шифрование "Криптография" https://pypi.org/project/cryptography/
Как вывидите, я сделал ряд функций, чтобы упростить использование шифрования Fernet, однако по какой-то причине он не может обрабатывать обратную косую черту, переводы строки, отступы и возврат каретки, результирующее дешифрование отличается от исходной строки, тестовая строка здесь "t\n\t"
from cryptography.fernet import Fernet
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
import base64
def encrypt_string(string_, password, f = None):
if f is None:
f = get_fernet_(password)
try:
return str(f.encrypt(string_.encode()))[2:- 1]
except:
return None
def decrypt_string(string_, password, f = None):
if f is None:
f = get_fernet_(password)
try:
return str(f.decrypt(string_.encode()))[2:- 1]
except:
return None
def get_fernet_(password):
if password and isinstance(password,str):
kdf = PBKDF2HMAC(algorithm = hashes.SHA256(),
length = 32,
salt = password.encode(),
iterations = 100000,
backend = default_backend())
key = base64.urlsafe_b64encode(kdf.derive(password.encode()))
f = Fernet(key)
return f
def test_encryption(s = "text", password = "key"):
my_f = get_fernet_(password)
s2 = encrypt_string(s, password)
s3 = decrypt_string(s2, password)
s4 = encrypt_string(s, password, my_f)
s5 = decrypt_string(s4, password, my_f)
if s == s3 and s == s5:
return True
return False
print (test_encryption("text"))
True
print (test_encryption("t\n\t"))
False
Если кто-нибудь может предоставить решение для этого конкретного кода или другой алгоритм шифрования, который может делать то, что мне нужно