441 Stimmen

Java-Sicherheit: Unzulässige Schlüsselgröße oder Standardparameter?

Ich hatte bereits eine Frage dazu gestellt, die aber nicht richtig beantwortet wurde und zu nichts führte.

Ich habe also einige Details zum Problem geklärt und würde gerne Ihre Ideen hören, wie ich das Problem beheben kann oder was ich versuchen sollte.

Ich habe Java 1.6.0.12 auf meinem Linux-Server installiert und der folgende Code läuft einwandfrei.

String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
    Cipher c = Cipher.getInstance("ARCFOUR");

    SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
    c.init(Cipher.DECRYPT_MODE, secretKeySpec);

    return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");

} catch (InvalidKeyException e) {
    throw new CryptoException(e);
}

Heute habe ich Java 1.6.0.26 auf meinem Server-Benutzer und wenn ich versuche, meine Anwendung auszuführen, erhalte ich die folgende Ausnahme. Ich vermute, dass es etwas mit der Java-Installationskonfiguration zu tun hat, da es in der ersten Version funktioniert, in der späteren Version aber nicht mehr.

Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
    ... 5 common frames omitted

Zeile 25 ist: c.init(Cipher.DECRYPT_MODE, secretKeySpec);

Anmerkungen:
* java.security auf dem Server 1.6.0.12 java-Verzeichnis stimmt fast vollständig mit dem 1.6.0.26 java.security-Datei. In der ersten Datei gibt es keine zusätzlichen Anbieter.
* Die vorherige Frage lautet aquí .

18voto

Ketan Punkte 391

In Java unterstützt AES standardmäßig einen 128-Bit-Schlüssel. Wenn Sie planen, einen 192-Bit- oder 256-Bit-Schlüssel zu verwenden, löst der Java-Compiler die Ausnahme "Illegale Schlüsselgröße" aus, die Sie gerade erhalten.

Die Lösung ist, wie victor & James vorgeschlagen, müssen Sie JCE (Java Cryptography Extension) je nach Ihrer JRE-Version (java6, java7 oder java8) herunterladen.

Die JCE-Zip-Datei enthält folgende JAR-Dateien:

  1. local_policy.jar
  2. US_export_policy.jar

Sie müssen diese Gefäße aus Ihrem <JAVA_HOME>/jre/lib/security . Wenn Sie auf einem Unix-System arbeiten, bezieht sich das wahrscheinlich auf /home/urs/usr/lib/jvm/java-<version>-oracle/

Manchmal funktioniert das Ersetzen von local_policy.jar, US_export_policy.jar im Sicherheitsordner unter Unix nicht, daher schlage ich vor, den Sicherheitsordner zuerst auf den Desktop zu kopieren, den @Desktop/security-Ordner des jar zu ersetzen, den Sicherheitsordner aus /jre/lib/ zu löschen und den Desktop-Sicherheitsordner nach /jre/lib/ zu verschieben.

z.B. :: sudo mv Sicherheit /usr/lib/jvm/java-7-oracle/jre/lib

16voto

evanxsummers Punkte 191

"Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6"

http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

16voto

anon Punkte 4053

Ich habe den gleichen Fehler bei der Verwendung von Windows 7 x64, Eclipse und JDK 1.6.0_30. Im JDK-Installationsordner gibt es eine jre Ordner. Dies hat mich zunächst verwirrt, da ich die oben genannten Jars ohne Erfolg zum Ordner lib/security des JDK hinzugefügt habe. Vollständiger Pfad:

C:\Program Files\Java\jdk1.6.0_30\jre\lib\security

Laden Sie die Dateien herunter, die in der jce Ordner von dieses Archiv in diesen Ordner.

5voto

max Punkte 761

Das Problem ist die Inhalt der Datei default_local.policy en local_policy.jar im Ordner jre \lib\security wenn Sie die JRE installieren:

// Some countries have import limits on crypto strength. This policy file
// is worldwide importable.

grant {
    permission javax.crypto.CryptoPermission "DES", 64;
    permission javax.crypto.CryptoPermission "DESede", *;
    permission javax.crypto.CryptoPermission "RC2", 128,
                                     "javax.crypto.spec.RC2ParameterSpec", 128;
    permission javax.crypto.CryptoPermission "RC4", 128;
    permission javax.crypto.CryptoPermission "RC5", 128,
          "javax.crypto.spec.RC5ParameterSpec", *, 12, *;
    permission javax.crypto.CryptoPermission "RSA", *;
    permission javax.crypto.CryptoPermission *, 128;
};

Wenn Sie keine weltweit gültigen Einstellungen benötigen, können Sie diese Datei einfach bearbeiten und den Inhalt in

// Country-specific policy file for countries with no limits on crypto strength.
grant {
    // There is no restriction to any algorithms.
    permission javax.crypto.CryptoAllPermission;
};

So sieht es aus, wenn Sie die JCE von Oracle herunterladen.

5voto

RHSeeger Punkte 15604

Es gibt eine kurze Diskussion zu diesem Thema aquí . Die Seite it Links zu scheint verschwunden zu sein, aber eine der Antworten könnte das sein, was Sie brauchen:

Das Kopieren von US_export_policy.jar und local_policy.jar von core/lib/jce nach $JAVA_HOME/jre/lib/security hat in der Tat geholfen. Danke!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X