Я пытаюсь реализовать сквозную поддержку шифрования для эфемерных сообщений pushbullet в python3.Сообщение об ошибке дешифрования InvalidTag с помощью python-криптографии
Я использую python-cryptography, но я получаю InvalidTag
-Исключение при расшифровке. Я дважды проверил ключ, iv и тег, но я не могу понять, где это происходит.
Ключ получается так:
salt = user_ident.encode()
pw = password.encode()
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=30000,
backend=backend)
dkey = kdf.derive(pw)
Затем он хранится в связках, как в кодировке Base64, но я проверил, если я получаю правильную строку байт при шифровании (также, делая это вручную REPL).
Расшифровать:
ciphertxt = a2b_base64(msg['ciphertext'])
version = ciphertxt[0:1]
tag = ciphertxt[1:17]
iv = ciphertxt[17:29]
enc_msg = ciphertxt[29:]
# Construct an AES-GCM Cipher object
decryptor = Cipher(
algorithms.AES(self.dkey_),
modes.GCM(iv, tag),
backend=backend
).decryptor()
cleartxt = decryptor.update(enc_msg) + decryptor.finalize()
Все вары являются байтовые строки, здесь relevant docs питона-криптография.
Чтобы уточнить: Я пробовал свои собственные методы для шифрования и успешного расшифровки некоторого текста. Но когда я активирую шифрование Pushbullet e2e на моем телефоне и моем клиенте, и я получаю уведомление, я получаю ошибку выше.
Метод шифрования компонует зашифрованное сообщение, как это:
b'1' + encryptor.tag + iv + ciphertxt
И я могу расшифровать. Не работает с тегом из полученного сообщения.
Любые идеи? :/
Ty. Я видел вашу (большую) документацию, и я пробовал это (несколько раз думаю). Я могу привести ваш полный пример. Если я использую свой реальный ключ, iv и тег из полученного сообщения, я тоже могу зашифровать и расшифровать. Но я не могу расшифровать исходное сообщение с тегом из сообщения. Думал, что это может быть проблема с кодировкой, но поскольку я могу использовать тег для шифрования ... –
При ближайшем рассмотрении библиотеки python, о которой вы упомянули, вы получаете недопустимую ошибку тега по крайней мере по следующим причинам: недопустимый ключ, недопустимый тег, недопустимый iv, неверное зашифрованное сообщение. Кажется вероятным, что один из них неверен. Можете ли вы дважды проверить байты каждого, убедиться, что они выглядят действительными и имеют правильную длину бита, и что вы получаете тот же ключ, когда используете интерактивные документы, как тот, который вы используете для расшифровки? –
Мне было интересно о «интерактивной» части. Я не вижу кнопку запуска (http://imgur.com/YeiNyF4), и я получаю сообщение об ошибке на консоли js: «TypeError: code undefined - docs.pushbullet.com:2022:10». Мой JS плох, но нет некоторых ';' или ',' отсутствует? –