開発中の 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 を使用し、特別な AES 暗号化が必要な場合は BouncyCastle ライブラリを使用します。
コードは次のとおりです。
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 インストールで何かを変更する必要があり、一部のユーザーのインストールに影響を与える可能性があるため、別の暗号化ライブラリに切り替えて制限なしで行う必要があるのは良い選択ではありません。したがって、おそらく弾む城が役立ちます。
更新 2
この制限を回避するために、実際に BouncyCastle を使用するように切り替えました。これは、BC プロバイダーではなく、独自の BC クラスを直接使用する場合にのみ機能することに注意してください。