web-dev-qa-db-ja.com

InvalidKeyException無効なキーサイズ

開発中の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"));
}

[〜#〜] update [〜#〜]

選択した回答によると、TeamCityのインストールで何かを変更する必要があり、一部のユーザーのインストールに影響する可能性があります-そのため、制限なしでそれを行うには別の暗号ライブラリに切り替える必要があります。だから、おそらく弾力のある城が役立ちます。

更新2

この制限を回避するために実際にBouncyCastleを使用するように切り替えました。これは、BCプロバイダーではなく、独自のBCクラスを直接使用する場合にのみ機能することに注意してください。

57
Vladimir

私は同様の問題を抱えていましたが、私の場合、パスエラーがありました。

Java_HOMEはjdk1.6.0_18であったため、2つのjarをjdk1.6.0_18/lib/security、ただしjdk1.6.0_18内にはjreディレクトリがあります。両方のファイルはjdk1.6.0_18/jre/lib/security

8
oopexpert

ポリシーファイルのインストールに加えて、CUSTOMLONGSECRETKEY...getBytes()が実際に32バイトの配列を生成することも確認してください。 CUSTOMLONGSECRETKEY.getBytes(some encoding)を使用して、そこから最初の32バイトを取得します。さらに良いことに、秘密鍵全体を使用して、必要なサイズのAESの鍵を導出します。

1

IDEが使用する)のJava_HOMEへのパスを確認してください。正しいパスにコピーするため。

私の場合、IntelliJを使用します:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/security

コンソールに$ Java_HOMEを表示する代わりに。 /Users/myuser/.sdkman/candidates/Java/current/jre/lib/security

0

私はjdk 1.8.0_151-と同じ問題に直面していました

このバージョンおよび上記のバージョンの場合、セキュリティに関連するjarファイルをダウンロードする必要はありません。local_policy.jarおよびUS_export_policy.jarは、これらのバージョンのパス\ jre\lib\security\policy(Java_HOMEは現在のJavaインストールフォルダー)必要な変更は、/ jre/lib/securityにあるJava.securityファイルのみです-行のコメントを外します-crypto.policy =無制限

0
vikash singh