我有一个测试在我的开发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"));
}
更新
根据所选答案,看起来我需要修改我的TeamCity安装并可能会影响一些用户的安装 - 所以这不是一个好选择,我必须切换到另一个加密库来避免限制。所以很可能Bouncy Castle会有帮助。
更新2
实际上,我已经切换到使用Bouncy Castle来避免这种限制。请注意,这仅适用于直接使用自己的BC类,而不是BC提供程序。