Я пытаюсь сделать код, который автоматически устанавливает пароль и шифрует архив, после этого он шифрует ключи в AES и затем отправляет его по ftp на другой компьютер. Когда компьютер получает это, он запрашивает пароль Fernet и просто пароль для предоставленного архива. Но дело в том, что, похоже, есть проблема: когда я пытаюсь ввести указанный пароль, Фернет говорит, что что-то не так. Код:
Код шифрования:
Decoded key (y): b'y0151X8VtqM2zoFq3Mi1EbLd0zUcNBib'
Length of y: 32
Key (y) in URL-safe Base64 format: eTAxNTFYOFZ0cU0yem9GcTNNaTFFYkxkMHpVY05CaWI=
Length of key (y) in Base64 format: 44
Key (y) after decoding in bytes: b'y0151X8VtqM2zoFq3Mi1EbLd0zUcNBib'
The length of key (y): 32
Key wasn't modified
Traceback (most recent call last):
File "/home/kolya080808/eftp/evsftp.py", line 88, in
cipher_suite = Fernet(y_decoded) # Теперь используем строку URL-safe Base64
^^^^^^^^^^^^^^^^^
File "/home/kolya080808/eftp/env/lib/python3.12/site-packages/cryptography/fernet.py", line 40, in __init__
raise ValueError(
ValueError: Fernet key must be 32 url-safe base64-encoded bytes.
Я много чего пытался сделать, например, не кодировать его в base64 или просто давать ключ, а не aesy, но это не помогло.
Все, что я хочу, это знать, что я сделал не так
Я пытаюсь сделать код, который автоматически устанавливает пароль и шифрует архив, после этого он шифрует ключи в AES и затем отправляет его по ftp на другой компьютер. Когда компьютер получает это, он запрашивает пароль Fernet и просто пароль для предоставленного архива. Но дело в том, что, похоже, есть проблема: когда я пытаюсь ввести указанный пароль, Фернет говорит, что что-то не так. Код: Код шифрования: [code]x = os.urandom(16) y = Fernet.generate_key() try: with pyzipper.AESZipFile(archname, 'w', compression=pyzipper.ZIP_LZMA) as zip_file: # Adding files to the archive zip_file.write(filename, arcname=os.path.basename(filename))
return x, y aesx = base64.b64decode(input("aesx: ")) aesy = base64.b64decode(input("aesy: ")) key = base64.b64decode(input("key: ")) iv = base64.b64decode(input("iv: ")) x, y = decrypt_data(aesx, aesy, key, iv)
print("Decoded key (y):", y) print("Length of y:", len(y))
y_base64 = base64.urlsafe_b64encode(y).decode('utf-8') print("Key (y) in URL-safe Base64 format:", y_base64) print("Length of key (y) in Base64 format:", len(y_base64))
y_decoded = base64.urlsafe_b64decode(y_base64) print("Key (y) after decoding in bytes:", y_decoded) print("The length of key (y):", len(y_decoded))
if y == y_decoded: print("Key wasn't modified") else: print("The key was modified!!")
cipher_suite = Fernet(y_decoded) with open(archname, 'rb') as encrypted_file: encrypted_data = encrypted_file.read() decrypted_data = cipher_suite.decrypt(encrypted_data)
with open(archname, 'wb') as decrypted_file: decrypted_file.write(decrypted_data)
print("Archive was successfully decoded") [/code] Ошибка: [code]Decoded key (y): b'y0151X8VtqM2zoFq3Mi1EbLd0zUcNBib' Length of y: 32 Key (y) in URL-safe Base64 format: eTAxNTFYOFZ0cU0yem9GcTNNaTFFYkxkMHpVY05CaWI= Length of key (y) in Base64 format: 44 Key (y) after decoding in bytes: b'y0151X8VtqM2zoFq3Mi1EbLd0zUcNBib' The length of key (y): 32 Key wasn't modified Traceback (most recent call last): File "/home/kolya080808/eftp/evsftp.py", line 88, in cipher_suite = Fernet(y_decoded) # Теперь используем строку URL-safe Base64 ^^^^^^^^^^^^^^^^^ File "/home/kolya080808/eftp/env/lib/python3.12/site-packages/cryptography/fernet.py", line 40, in __init__ raise ValueError( ValueError: Fernet key must be 32 url-safe base64-encoded bytes. [/code] Я много чего пытался сделать, например, не кодировать его в base64 или просто давать ключ, а не aesy, но это не помогло. Все, что я хочу, это знать, что я сделал не так :)