Я это уже видел. Не пойму где соль брать для создания PBEKeySpec. Хранить ее прямо в программе в открытом виде? А ее никто оттуда считать не может? Если да то это бессмысленно.
Да и вообще как то странно там делается... Где шифруемые данные??? password? А где тогда ключ шифрования? Должен же быть еще ключ. А его вроде и нет... Или соль это и есть ключ? Просто ключ должен пользователь задавать обычно...
Ага насчет шифруемых данных вроде понял. Вон она там строка передается cipher.doFinal("Hello, World!".getBytes("UTF-8"));
Но во первых вопрос про соль остается открытым, во вторых мне выдает такую ошибку: java.security.NoSuchAlgorithmException: PBKDF2WithHmacSHA256 SecretKeyFactory not available
Да, он действительно куда понятнее. Только я никак не врублюсь что за класс Base64 там используется? У меня IDE нашла аж 3 реализации его встроенных и еще гуглом нашел несколько штук других. (в разных пространствах имен или как тут в Java это называется...) Какой использовать?
Андрей: Так я не знаю что делает этот класс. Что это за транспортное кодирование? Я подумал это просто смена кодировки... Может прокатит вот так? new String(result, "UTF-8")
Андрей: И кстати я потестил, нет, не будет это работать. Точнее это будет работать только если ключ будет 16 символов. Иначе ошибку бросает. Таким образом мы возвращаемся к предыдущему варианту - надо получать хэш от ключа, чтобы он гарантированно был 16-байтным.
Транспортное кодирование - это преобразование двоичного потока в алфавит, который "пропускают" без искажений текст-ориентированные транспортные системы, например, почта или старый HTTP. Почитайте в вики.
Длина ключа алгоритмов обычно жестко задана. У AES это 16, 24 или 32 байта. Хеширование, о чем говорите Вы, выполняется не над ключом, а над паролем или парольной фразой, для того чтобы получить ключ требуемой длины.
Андрей: Или вы не правы или я вас неправильно понимаю. Но ключ это именно строка которой шифруют данные в моем понимании. А пароль это как раз те самые данные которые шифруют. (пароль или файл, да что угодно) Так как хэшировать? Вопросы по поводу способа хранения соли и по поводу ошибки остаются открытыми! :(