У меня есть тест, который отлично работает на моем MacBook Pro, но не работает в непрерывной интеграции сервера TeamCity.
Ошибка следующая:
java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
Оба ящика разработки и TeamCity используют Java 1.6, и я использую библиотеку BouncyCastle для необходимости специального шифрования AES.
Следующий код:
private byte[] aesEncryptedInfo(String info) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidParameterSpecException, InvalidAlgorithmParameterException, NoSuchProviderException {
Security.addProvider(new BouncyCastleProvider());
SecretKey secret = new SecretKeySpec(CUSTOMLONGSECRETKEY.substring(0, 32).getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(VECTOR_SECRET_KEY.getBytes()));
return cipher.doFinal(info.getBytes("UTF-8"));
}
UPDATE
Похоже, что в соответствии с выбранным ответом мне нужно что-то изменить в моей установке TeamCity, и это может повлиять на некоторые пользовательские установки - так что это не лучший выбор, я должен переключиться на другую библиотеку криптографии, чтобы сделать это без ограничений. Так что, вероятно, бодрый замок поможет.
ОБНОВЛЕНИЕ 2
Я фактически переключился на использование BouncyCastle, чтобы избежать этого ограничения. Обратите внимание, что это работает, только если вы используете собственные классы BC, а не поставщик BC.