Вопросы по шифрованию AES в Java с использованием криптографической библиотеки - PullRequest
0 голосов
/ 16 марта 2020

В настоящее время я искал пример шифрования и дешифрования AES с использованием Java, и я наткнулся на что-то подобное в качестве решения:

ССЫЛКА

Другое Решения предлагают тот же подход. Мне удалось заставить его работать, но у меня есть только несколько вопросов о его реализации.

Вопросы:

  1. Почему классу PBEKeySpe c нужен пароль? для чего это? ключ уже есть, зачем ему нужен дополнительный токен или пароль?

  2. Я понимаю, что ключ и соль являются частью зашифрованного значения исходной незашифрованной строки , Почему это так? почему бы не разрешить хранить ключ генерации и соль где-нибудь еще?

Спасибо, и я ценю любую помощь. Просто хочу понять, почему это было сделано именно так.

1 Ответ

0 голосов
/ 16 марта 2020

Для простой в использовании и надежной библиотеки шифрования solid java Я рекомендую использовать http://www.jasypt.org/

Для ваших вопросов:

  1. пароль часто используется для получения ключа шифрования; это необходимо, потому что многие алгоритмы требуют, чтобы ключи соответствовали определенным свойствам, таким как длина и случайность, что не удовлетворяется многими паролями, обычно используемыми людьми. См. Также https://docs.oracle.com/javase/7/docs/api/javax/crypto/spec/PBEKeySpec.html

  2. Соль и вектор инициализации хранятся вместе с зашифрованным значением (то есть они НЕ зашифрованы), поскольку это удобно - вы можете легко получить их и использовать для расшифровки исходной строки. Это все еще безопасно, потому что эти значения обычно нужны только для того, чтобы быть уникальными, а не храниться в секрете; например, соль помогает предотвратить атаки радужного стола, имея уникальную соль для каждого значения. Полезный ресурс, объясняющий некоторые термины: https://crypto.stackexchange.com/questions/3965/what-is-the-main-difference-between-a-key-an-iv-and-a-nonce

...