Шифрование в Java - лучшие практики? - PullRequest
0 голосов
/ 16 мая 2011

Я работаю над клиент-серверным приложением на Java, которое собирается использовать шифрование с закрытым ключом .

В настоящее время у меня есть класс со статическим объектом Cipherкласс, который я инициализирую следующим образом: myCipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);.

Теперь мой вопрос: у меня двусторонняя связь, должен ли я иметь отдельный объект Cipher для каждого пути (один для шифрования и один для дешифрования)и использовать тот же вектор инициализации?Или мне просто использовать один и тот же объект и вызвать Cipher.init(), чтобы изменить режимы в зависимости от того, шифрую я или расшифровываю?

Имеет смысл иметь отдельные объекты в моей голове, но я просто хотел быть уверен,,Я пробовал поиск в Google, но в большинстве примеров шифрование показывается только одним способом.

В настоящее время я отправляю вектор инициализации на сервер в незашифрованном виде, это правильно, или есть уязвимость в безопасности?

Или я приближаюсьэто совсем не так?

Спасибо.

1 Ответ

1 голос
/ 16 мая 2011

Ваш вопрос в два раза:

  1. Вы должны использовать один объект.Это экономит память.Но если память расходуется, продолжайте с двумя.По крайней мере, это сделает ваш код более читабельным.

  2. IV не нуждается в шифровании.IV - это случайное значение, синхронизированное как отправителем, так и получателем.Самое важное в IV - это то, что его нельзя повторять или использовать с одним и тем же ключом!

...