我有一个在我的开发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提供程序.