Ich hatte früher eine Frage dazu gestellt, aber sie wurde nicht richtig beantwortet und führte nirgendwo hin.
Daher habe ich einige Details zu dem Problem geklärt und würde gerne Ihre Ideen dazu hören, wie ich das beheben könnte oder was ich versuchen sollte.
Ich habe Java 1.6.0.12 auf meinem Linux-Server installiert und der folgende Code läuft einfach perfekt.
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 Serverbenutzer installiert und beim Versuch, meine Anwendung auszuführen, wird die folgende Ausnahme angezeigt . Ich würde vermuten, dass es etwas mit der Java-Installationskonfiguration zu tun hat, da es in der ersten Version funktioniert, in der späteren Version jedoch nicht.
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 lautet:
c.init(Cipher.DECRYPT_MODE, secretKeySpec);
Hinweise:
* java.security auf Server 1.6.0.12 java Matches fast vollständig mit der 1.6.0.26 java.security Datei. Im ersten gibt es keine zusätzlichen Anbieter.
* Die vorherige Frage ist hier .
Caused by: java.security.InvalidKeyException: Illegal key size
Antworten:
Höchstwahrscheinlich ist die Datei mit unbegrenzter Stärke jetzt nicht installiert.
Möglicherweise müssen Sie diese Datei herunterladen:
Java Cryptography Extension (JCE) Richtliniendateien mit unbegrenzter Stärke 6
Java Cryptography Extension (JCE) Richtliniendateien mit unbegrenzter Stärke 7 Download
Java Cryptography Extension (JCE) Richtliniendateien mit unbegrenzter Gerichtsbarkeit 8 Herunterladen (nur für Versionen vor Java 8 u162 erforderlich)
Extrahieren Sie die JAR-Dateien aus der Zip-Datei und speichern Sie sie in
${java.home}/jre/lib/security/
.quelle
Java/jre/lib/security
,Java/jdk/lib/security
undJava/jdk/jre/lib/security
. Wenn Sie 'java -version' ausführen, werden die erwarteten Details zurückgegeben.Die JRE / JDK / Java 8-Gerichtsbarkeitsdateien finden Sie hier:
Java Cryptography Extension (JCE) Richtliniendateien mit unbegrenzter Stärke 8 Download
Wie James oben sagte:
Installieren Sie die Dateien in
${java.home}/jre/lib/security/
.quelle
Für JAVA 7 lautet der Download-Link jce-7-download
Kopieren Sie die beiden heruntergeladenen Jars in Java \ jdk1.7.0_10 \ jre \ lib \ security. Erstellen Sie aus Sicherheitsgründen
eine Sicherungskopie älterer Jars.
Für JAVA 8 lautet der Download-Link jce-8-download.
Kopieren Sie die heruntergeladenen Jars in Java \ jdk1.8.0_45 \ jre \ lib \ security. Erstellen Sie aus Sicherheitsgründen
eine Sicherungskopie älterer Jars.
quelle
Mit Java 9, Java 8u161 , Java 7u171 und Java 6u181 ist die Einschränkung jetzt standardmäßig deaktiviert. Siehe Problem in der Java Bug Database .
Ab Java 8u151 können Sie die Einschränkung programmgesteuert deaktivieren.
Stattdessen können Sie jetzt die folgende Zeile aufrufen, bevor Sie JCE-Klassen zum ersten Mal verwenden (dh vorzugsweise direkt nach dem Start der Anwendung):
quelle
Dies ist eine reine Codelösung . Sie müssen keine Konfigurationsdateien herunterladen oder damit herumspielen.
Es ist eine reflexionsbasierte Lösung, die auf Java 8 getestet wurde
Rufen Sie diese Methode zu Beginn Ihres Programms einmal auf.
// Importe
//Methode
Credits: Delthas
quelle
"Java Cryptography Extension (JCE) -Dateien mit unbegrenzter Gerichtsbarkeit 6"
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
quelle
Bei der Verwendung von Windows 7 x64, Eclipse und JDK 1.6.0_30 ist der gleiche Fehler aufgetreten. Im JDK-Installationsordner befindet sich ein
jre
Ordner. Dies warf mich zunächst ab, als ich die oben genannten Gläser ohne Glück in den Ordner lib / security des JDK einfügte. Vollständigen Pfad:Laden Sie die im
jce
Ordner dieses Archivs enthaltenen Dateien herunter und extrahieren Sie sie in diesen Ordner.quelle
In Java unterstützt AES standardmäßig einen 128-Bit-Schlüssel. Wenn Sie einen 192-Bit- oder 256-Bit-Schlüssel verwenden möchten, löst Java Complier eine Ausnahme für die illegale Schlüsselgröße aus, die Sie erhalten.
Die Lösung ist wie von Victor & James vorgeschlagen. Sie müssen JCE (Java Cryptography Extension) gemäß Ihrer JRE-Version (Java6, Java7 oder Java8) herunterladen.
Die JCE-Zip enthält folgende JAR:
Sie müssen diese Gläser von Ihrem ersetzen
<JAVA_HOME>/jre/lib/security
. Wenn Sie sich auf einem Unix-System befinden, wird wahrscheinlich darauf verwiesen/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. Ich empfehle daher, zuerst den Sicherheitsordner auf Ihren Desktop zu kopieren, den Ordner @ Desktop / security des JAR zu ersetzen und den Sicherheitsordner aus / jre / lib zu löschen / & Verschieben Sie den Desktop-Sicherheitsordner nach / jre / lib /.
zB :: sudo mv security
/usr/lib/jvm/java-7-oracle/jre/lib
quelle
Es gibt eine kurze Diskussion darüber , was scheint dieses Problem zu sein hier . Die Seite, auf die verlinkt wird, scheint verschwunden zu sein, aber eine der Antworten könnte die sein, die Sie benötigen:
quelle
US_export_policy.jar
undlocal_policy.jar
in meinem lib / security-Ordner schon einmal Java installiert. Und ich konnte core / lib / jce übrigens nicht in meinem Java-Installationsordner finden.Das Problem ist der Inhalt der Datei default_local.policy in local_policy.jar im Ordner jre \ lib \ security , wenn Sie die JRE installieren:
Wenn Sie keine weltweit gültigen Einstellungen benötigen, können Sie diese Datei einfach bearbeiten und den Inhalt in ändern
Dies erhalten Sie, wenn Sie das JCE von Oracle herunterladen.
quelle
Ich habe auch das Problem erhalten, aber nachdem ich das vorhandene durch das heruntergeladene (von JCE) ersetzt habe, wurde das Problem behoben. Neue Kryptodateien bieten unbegrenzte Stärke.
quelle
Standardmäßig unterstützt Java nur AES-128-Bit-Schlüsselgrößen (16 Byte) für die Verschlüsselung. Wenn Sie nicht mehr als die Standardunterstützung benötigen, können Sie den Schlüssel vor der Verwendung auf die richtige Größe zuschneiden
Cipher
. Siehe javadoc für standardmäßig unterstützte Schlüssel.Dies ist ein Beispiel für das Generieren eines Schlüssels, der mit jeder JVM-Version funktioniert, ohne die Richtliniendateien zu ändern. Verwendung nach eigenem Ermessen.
Hier ist ein guter Artikel darüber, ob die Schlüsselgrößen 128 bis 256 im AgileBits-Blog von Bedeutung sind
quelle
Ab Java 9 oder 8u151 können Sie eine Zeile in der Datei kommentieren:
Und ändern:
zu
quelle
Wenn Sie die Linux-Distribution mit apt verwenden und webupd8 PPA hinzugefügt haben, können Sie den Befehl einfach ausführen
Weitere Updates:
Ab Java 8 Update 151 ist die Unlimited Strength Jurisdiction Policy in Java 8 enthalten, wird jedoch nicht standardmäßig verwendet. Um es zu aktivieren, müssen Sie die Datei java.security in
<java_home>/jre/lib/security
(für JDK) oder<java_home>/lib/security
(für JRE) bearbeiten . Kommentieren Sie die Zeile aus (oder fügen Sie sie ein)crypto.policy=unlimited
Stellen Sie sicher, dass Sie die Datei mit einem Editor bearbeiten, der als Administrator ausgeführt wird. Die Richtlinienänderung wird erst nach dem Neustart der JVM wirksam
Vor Java 8 Update 151 gelten die restlichen Antworten. Laden Sie die Richtliniendateien für JCE Unlimited Strength Jurisdiction herunter und ersetzen Sie sie.
Weitere Informationen finden Sie in meinem persönlichen Blog-Beitrag unten - Installieren von JCE-Richtliniendateien (Java Cryptography Extension) mit unbegrenzter Stärke
quelle
Es gibt zwei Möglichkeiten, um dieses Problem zu lösen
Option 1: Verwenden Sie ein Zertifikat mit einer geringeren Länge von RSA 2048
Option 2: Sie aktualisieren zwei Gläser in
jre\lib\security
Java. http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.htmloder Sie verwenden IBM Websphere oder einen Anwendungsserver, der Java verwendet. Das Hauptproblem, mit dem ich konfrontiert war, war die Verwendung einer Zertifizierung mit maximaler Länge. Wenn ich Ohren auf Websphere einsetzte, wird dieselbe Ausnahme ausgelöst
Ich habe den Java-Ordner in Websphere mit zwei Gläsern aktualisiert: https://www14.software.ibm.com/webapp/iwm/web/reg/pick.do?source=jcesdk&lang=de_DE
Sie können die Referenz unter dem Link https://www-01.ibm.com/support/docview.wss?uid=swg21663373 überprüfen
quelle
Stellen Sie sicher, dass Sie die neueste Version von JDK / JRE verwenden .
In meinem Fall hatte ich JCE in den JRE-Ordner gelegt, aber es hat nicht geholfen. Dies geschah, weil ich mein Projekt direkt von der IDE aus ausführte (mit JDK).
Dann habe ich mein JDK und JRE auf die neueste Version (1.8.0_211) aktualisiert und das Problem war behoben.
Weitere Details: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170157
quelle
Das Standard-JDK unterstützt die Verschlüsselung aufgrund amerikanischer Einschränkungen nur über 128-Bit-Schlüssel. Um die Verschlüsselung von einem 256 Bit langen Schlüssel zu unterstützen, müssen wir ihn ersetzen
local_policy.jar
undUS_export_policy.jars
im$JAVA_HOME/java-8-oracle/jre/lib/security
Ordner, sonst gibt es:quelle
Du musst dorthin gehen
/jdk1.8.0_152 | / jre | / lib | / Sicherheit | java.security und auskommentieren die
zu
quelle