Ключевая гибкость в java.crypto как в openssl

У меня есть следующий сценарий BASH для шифрования и дешифрования строки с паролем.

$ echo 'some-data' | openssl enc -base64 -e -aes-256-cbc -nosalt -pass pass:some-password

luYWG/C5uryBVtPHilO6Pg==

$ echo 'luYWG/C5uryBVtPHilO6Pg==' | openssl enc -base64 -d -aes-256-cbc -nosalt -pass pass:some-password

some-data

Как видите, я могу ввести какой-то пароль, чтобы зашифровать и расшифровать другую строку, используя openssl и AES-256.

Проблема возникла, когда я хочу воспроизвести это на Java с помощью java.crypto, потому что какой-то пароль, по-видимому, не соответствует ключевым требованиям, у меня есть этот код:

public static String decrypt(String data, String secret)
            throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secret.getBytes(), "AES"));
        return new String(cipher.doFinal(Base64.getDecoder().decode(data)));
}

Когда я запускаю его с теми же входами, я получаю следующее исключение

java.security.InvalidKeyException: Invalid AES key length: ...

Есть ли способ заставить его работать? Я предполагаю, что openssl может взять мой желаемый строковый пароль и преобразовать его в действительный

Не Java, но определенно актуально: stackoverflow.com/questions/9488919/….

Oliver Charlesworth 30.05.2018 21:54

Dupe stackoverflow.com/questions/14695766/… и stackoverflow.com/questions/22085107/… и stackoverflow.com/questions/11783062/… и stackoverflow.com/questions/31947256/… и stackoverflow.com/questions/29151211/…, которые находятся Java, но (все?) Для менее ужасного соленого варианта, так что вам нужно настроить.

dave_thompson_085 30.05.2018 23:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
31
0

Другие вопросы по теме