Симметричное шифрование на Java с помощью Fernet - PullRequest
0 голосов
/ 10 июля 2019

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

Десериализация существующего ключа:

final Key key = new Key("cw_0x689RpI-jtRR7oE8h_eQsKImvJapLeSbXpwF4e4=");

Создание токена:

final Token token = Token.generate(random, key, "secret message");

Десериализация существующего токена:

final Token token = Token.fromString("gAAAAAAdwJ6wAAECAwQFBgcICQoLDA0ODy021cpGVWKZ_eEwCGM4BLLF_5CV9dOPmrhuVUPgJobwOz7JcbmrR64jVmpU4IwqDA==");

Почему вынужен случайный параметр для шифрования секретного сообщения?Я реализовал шифрование fermet в python, и он никогда не запрашивал источник случайности.

>>> from cryptography.fernet import Fernet
>>> key = Fernet.generate_key()
>>> f = Fernet(key)
>>> token = f.encrypt(b"my deep dark secret")
>>> token
b'...'
>>> f.decrypt(token)
b'my deep dark secret

Как я могу получить тот же стандарт шифрования, что и в python, чтобы я мог использовать тот же ключ шифрования?

1 Ответ

0 голосов
/ 11 июля 2019

С одним и тем же ключом реализации в Python и Java будут идеально совместимы.Но с обеих сторон, конечно, нужно использовать один и тот же.Если вы используете код Python в качестве основы, выполните print(key) и скопируйте этот же ключ в вариант Java (это будет строка urlsafebase64, поэтому проблем с транспортом нет).В Java при создании токена используйте экземпляр SecureRandom().Он используется только для IV и в любом случае является частью токена, поэтому будет доступен для кода расшифровки на любом языке.Fernet Python автоматически использует хорошее случайное число (оно прозрачно, вам не нужно его выбирать).Но какой бы случайный выбор вы ни выбрали в Java при создании токенов, он никак не повлияет на код дешифрования, просто используйте одну и ту же строку ключа в обоих случаях.

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