У меня есть следующий сценарий 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 может взять мой желаемый строковый пароль и преобразовать его в действительный
Dupe stackoverflow.com/questions/14695766/… и stackoverflow.com/questions/22085107/… и stackoverflow.com/questions/11783062/… и stackoverflow.com/questions/31947256/… и stackoverflow.com/questions/29151211/…, которые находятся Java, но (все?) Для менее ужасного соленого варианта, так что вам нужно настроить.




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