Пара вопросов здесь.Если я изменю 16 на 24 для ivBytes, я получаю ошибку, которая говорит, что ожидаемая длина iv равна 16, а не 24.
Это правильно.AES определяется только с размером блока 128 бит / 16 байтов.А для CBC требуется случайная (измеренная) IV единичного блока.
Я также не уверен, шифруется ли этот код в AES256 или AES.
Мы также не уверены, так как byteArray
не указан, и реализация AES в Java / Android выбирает между AES-128, -192 или -256, используя размер ключа.Обратите внимание, что ключ также должен состоять из рандомизированных байтов (а не пароля, закодированного в байтах).С Android все в порядке, но для Java вам могут понадобиться файлы Unlimited Crypto для более старых версий Java Runtime Environment (JRE).
Излишне говорить, что byteArray
должно быть 32 байта для AES-256.
Кстати, значение является шестнадцатеричным, например, это может быть что-то вроде 831684e1.Не уверен, влияет ли это на шифрование.
Обычно шестнадцатеричные числа - это представление двоичного значения.Возможно, вам лучше сначала декодировать шестнадцатеричное значение, а затем зашифровать двоичный файл.Это будет вдвое меньше зашифрованного текста (и будет придерживаться принципа наименьший сюрприз и для других разработчиков).
В настоящее время вы используете value.getBytes()
, что означает, что вы получитеспецифичная для платформы кодировка шестнадцатеричных символов (UTF-8 для Android, но в основном вы получите US-ASCII, поскольку шестнадцатеричные числа всегда кодируются как один байт на символ).Другими словами, вы должны закодировать двоичное значение дважды , в то время как кодирование вообще не требуется.