Python 3 Fernet шифрует одно и то же сообщение разными способами - PullRequest
0 голосов
/ 29 марта 2019

В настоящее время я изучаю python и пытаюсь создать программу шифрования, которая каждый раз одинаково шифрует одно и то же сообщение. Я достиг процесса шифрования с помощью Fernet.

import base64
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

password_provided = 'examplepassword'
kpassword = password_provided.encode()

salt = b'H&\xb6\n\xe6@\xdf\x13\x88\x98 Z\xf0\xea,\xca\x05\xd7\x99\x105\xa8\xa2{\xa9F\xe0\x91\x89c)\xf8%@]"u<\xe03|\xe2\re]\'\xb7\x89O2\xf9\x0bY\xf5\xb6<\x80z\\bM\x8dDx'
kdf = PBKDF2HMAC(
    algorithm = hashes.SHA256,
    length = 32,
    salt = salt,
    iterations = 100000,
    backend = default_backend()
)
key = base64.urlsafe_b64encode(kdf.derive(kpassword))


k = Fernet(key)
example = k.encrypt(b'ABC')
print(example)

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

На всякий случай, если вы предложите,нет, я на 90% уверен, что соль не является проблемой, поскольку я пробовал более длинные и более короткие соли, используя os.urandom(), я также пытался изменить пароль.

РЕДАКТИРОВАТЬ: я пытаюсь зашифровать входчто человек дает, то кто-то еще дает тот же вход, и я хочу сравнить шифрование

1 Ответ

0 голосов
/ 29 марта 2019

Здесь нет ничего плохого. Fernet шифрует использование AES-128 с режимом работы CBC с заполнением PKCS7.

Для режима CBC требуется IV, и этот IV генерируется функцией os.urandom (). Итак, при каждом запуске у вас будет свой IV, и это изменит шифрование, см. вероятностное шифрование .

Примечание. Используемая соль используется для генерации ключей (PBKDF2HMAC), а не для IV режима CBC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...