web-dev-qa-db-ja.com

スレッド「メイン」の例外Java.security.InvalidKeyException:キーサイズまたはデフォルトパラメータが無効です

以下のコードは、このエラーメッセージをスローしています。

Exception in thread "main" Java.security.InvalidKeyException: Illegal key size or default parameters

Cipher dcipher;

byte[] salt = new String("12345678").getBytes();
int iterationCount = 1024;
int keyStrength = 256;
SecretKey key;
byte[] iv;

Decrypter(String passPhrase) throws Exception {
    SecretKeyFactory factory = SecretKeyFactory
            .getInstance("PBKDF2WithHmacSHA1");
    System.out.println("factory +" + factory);
    KeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), salt,
            iterationCount, keyStrength);
    System.out.println("spec  " + spec);
    SecretKey tmp = factory.generateSecret(spec);
    System.out.println();
    key = new SecretKeySpec(tmp.getEncoded(), "AES");
    dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
}

public String encrypt(String data) throws Exception {
    dcipher.init(Cipher.ENCRYPT_MODE, key);
    AlgorithmParameters params = dcipher.getParameters();
    iv = params.getParameterSpec(IvParameterSpec.class).getIV();
    byte[] utf8EncryptedData = dcipher.doFinal(data.getBytes());
    String base64EncryptedData = new Sun.misc.BASE64Encoder()
            .encodeBuffer(utf8EncryptedData);

    System.out.println("IV "
            + new Sun.misc.BASE64Encoder().encodeBuffer(iv));
    System.out.println("Encrypted Data " + base64EncryptedData);
    return base64EncryptedData;

なぜ私がそのエラーを受け取るのか誰かが知っていますか?

10
user2968404

おそらく、JCEポリシーファイルをまだインストールしていません。

このファイルをダウンロードします。

そして、ファイルを${Java.home}/jre/lib/security/.にインストールします

${Java.home}はJavaのインストールディレクトリを指します

mac用:

  • finderを開く
  • 押す commandshiftg
  • タイプ/Library/Java/JavaVirtualMachines
  • jDKのバージョンに移動します
  • 次にContents/Home/jre/lib/security
  • ダウンロードしたファイルを解凍し、すべてのファイルをここに配置します

cLI用

unzip downloaded_policy_file.Zip  -d /Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security/

mv /Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security/UnlimitedJCEPolicyJDK<VERSION>/* /Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security  

rm -rf Library/Java/JavaVirtualMachines/<JDK_VERSION>/Contents/Home/jre/lib/security/UnlimitedJCEPolicyJDK<VERSION>/
23
CodeFanatic

Java 7のJCEをこのリンクからダウンロード http://www.Oracle.com/technetwork/Java/javase/downloads/jce-7-download-432124.html

パスを開きますC:\Program Files\Java\jdk1.7.0_80\jre\lib\securityそしてここに2つの瓶を貼り付けます(2つの瓶がすでに存在していたとしても、それらの2つの瓶を交換してください)

1
Lucky

自作でMacを使用している場合

brew cask install jce-unlimited-strength-policy
0
Neftanic

JDK 1.8u151以降、JCEライブラリを個別にダウンロードする必要はありません。単に編集する:

$JDK_HOME/jre/lib/security/Java.security

行のコメントを解除します。

crypto.policy=unlimited
0

Java 7の場合、ダウンロードリンクは jce-7-download

ダウンロードした2つのjarをJava\jdk1.7.0_10\jre\lib\securityにコピーします。古いjarのバックアップを取り、安全を確保します。

0
Rajeev