Я унаследовал старый проект Java от 2006 года (первоначальный dev давно ушел, и я никогда не кодировал Java раньше), где я получаю эту ошибку:
EncryptionException: javax.crypto.IllegalBlockSizeException: длина ввода должна быть кратна 8 при дешифровании с добавленным шифром
Код, на который он ссылается, выглядит следующим образом:
public String decrypt( String encryptedString ) throws EncryptionException
{
if ( encryptedString == null || encryptedString.trim().length() <= 0 )
throw new IllegalArgumentException( "encrypted string was null or empty" );
try
{
SecretKey key = keyFactory.generateSecret( keySpec );
cipher.init( Cipher.DECRYPT_MODE, key );
BASE64Decoder base64decoder = new BASE64Decoder();
byte[] cleartext = base64decoder.decodeBuffer( encryptedString );
byte[] ciphertext = cipher.doFinal( cleartext );
return bytes2String( ciphertext );
}
catch (Exception e)
{
throw new EncryptionException( e );
}
}
Я не совсем уверен во внутренней работе программы, но я знаю, что в этом каталоге проекта находятся несколько файлов конфигурации и файл key.properties. Что касается «длины ввода» (как указано в сообщении об ошибке), мой пароль для базы данных составляет 15 символов, а «ключ» в key.properties - 25 символов. Я понятия не имею, имеет ли это значение или нет.
Что следует отметить:
- Я попытался изменить пароль БД на 16 символов (кратно 8), но безрезультатно.
- Я прочитал это и это , и они не помогли
- Я перемещаю этот проект с одного сервера на другой. Он работает на своем оригинальном сервере.
- Исходный сервер работает под управлением JRE 1.4.2. Новый сервер работает под управлением JRE 1.6u27.
- Я ДЕЙСТВИТЕЛЬНО не хочу перестраивать .jar. Я не Java-разработчик, и проект довольно масштабный.
Спасибо за вашу помощь.