Ich hatte auf der Seite „A01 HelloWorld mit Java-Version“ schon auf die Wichtigkeit der Java-Version hingewiesen. In einem engen Zusammenhang damit steht auch die Nutzung aller Schlüssellängen in einem Java-Programm. Umgekehrt bedeutet es: ist die verwendete Java-Version „zu alt“ oder nicht speziell dafür freigeschaltet, stürzen unsere Programme sehr heftig ab und Ihr werdet mehr als frustiert sein.
Die nachfolgend vorgestellte Methode kann Euch später viel Sucharbeit und Mühe ersparen, wenn Ihr sie grundsätzlich zu Programmbeginn einbaut und das Ergebnis auswertet.
Daher werden wir an dieser Stelle überprüfen, ob die eingesetzte Java-Version die notwendigen Berechtigungen besitzt. Startet einfach das nachfolgende Programm und schaut Euch die Ausgabe an:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package net.bplaced.javacrypto.general; /* * Herkunft/Origin: http://javacrypto.bplaced.net/ * Programmierer/Programmer: Michael Fehr * Copyright/Copyright: frei verwendbares Programm (Public Domain) * Copyright: This is free and unencumbered software released into the public domain. * Lizenttext/Licence: <http://unlicense.org> * getestet mit/tested with: Java Runtime Environment 8 Update 191 x64 * getestet mit/tested with: Java Runtime Environment 11.0.1 x64 * Datum/Date (dd.mm.jjjj): 25.01.2019 * Funktion: prüft auf unbegrenzte Kryptographie-Schlüssellänge * Function: checks for unlimited cryptographic key-length * * Sicherheitshinweis/Security notice * Die Programmroutinen dienen nur der Darstellung und haben keinen Anspruch auf eine * korrekte Funktion, insbesondere mit Blick auf die Sicherheit ! * Prüfen Sie die Sicherheit bevor das Programm in der echten Welt eingesetzt wird. * The program routines just show the function but please be aware of the security part - * check yourself before using in the real world ! */ import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; public class A03b_UnlimitedCryptography { public static void main(String[] args) { System.out.println("A03b Pruefung auf unbegrenzte Kryptographie-Schluessellaenge"); System.out.println("Das System unterstützt nur die eingeschraenkte Kryptographie:" + restrictedCryptography()); System.out.println("Moegliche Ergebnisse: false = unbeschraenkte Kryptographie freigeschaltet"); System.out.println(" true = nur die eingeschraenkte Kryptographie ist freigeschaltet"); } /** * Determines if cryptography restrictions apply. * Restrictions apply if the value of {@link Cipher#getMaxAllowedKeyLength(String)} returns a value smaller than {@link Integer#MAX_VALUE} if there are any restrictions according to the JavaDoc of the method. * This method is used with the transform <code>"AES/CBC/PKCS5Padding"</code> as this is an often used algorithm that is <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#impl">an implementation requirement for Java SE</a>. * * @return <code>true</code> if restrictions apply, <code>false</code> otherwise */ public static boolean restrictedCryptography() { try { return Cipher.getMaxAllowedKeyLength("AES/CBC/PKCS5Padding") < Integer.MAX_VALUE; } catch (final NoSuchAlgorithmException e) { throw new IllegalStateException("The transform \"AES/CBC/PKCS5Padding\" is not available (the availability of this algorithm is mandatory for Java SE implementations)", e); } } } |
Solltet Ihr auf der Konsole diese Ausgabe finden, ist Eure Java-Version für Kryptographie umfangreich zu nutzen (gut !):
1 2 3 4 |
A03b Pruefung auf unbegrenzte Kryptographie-Schluessellaenge Das System unterstützt nur die eingeschraenkte Kryptographie:false Moegliche Ergebnisse: false = unbeschraenkte Kryptographie freigeschaltet true = nur die eingeschraenkte Kryptographie ist freigeschaltet |
Was könnt Ihr machen um die Begrenzung aufzuheben ? Die notwendigen Anleitungen findet Ihr im Internet unter den Suchbegriffen „java unlimited strength policy“ oder… Ihr macht ein Update Eurer Java-Version auf Hauptversion 8 und der aktuellsten Unterversion (im Moment 201).
Noch ein Hinweis: entscheidend ist die Java-Version der Maschine, auf der Eurer Code ausgeführt wird, d.h. wenn Ihr die passende Version auf dem (Entwicklungs-) Rechner habt, aber der Einsatzrechner ist noch auf Java 7, kann es Probleme geben!
Den Quellcode zum Programm findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/A-Allgemeine-Programme. Dort findet Ihr auch die Versionen für Java 11.
Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.
Letzte Aktualisierung: 26.01.2019