Die symmetrische Verschlüsselung basiert auf dem einfachen Ansatz, das sowohl der Absender der (verschlüsselten) Nachricht als auch der Empfänger dieser (verschlüsselten) Nachricht das Passwort kennen, damit der Empfänger die Nachricht lesen kann. Das führt aber zur nächsten Fragestellung – wie einigen sich der Absender und der Empfänger auf das (selbe) Passwort und wie tauschen es die Beiden aus ?
Die Fragestellung wird zudem noch dadurch verschärft, das ein Passwort möglichst lang und aus vielen (möglichst) unterschiedlichen Zeichen besteht, die auch keine sinnvolle Zeichenkette bilden. Die Lösung zu diesem Problem werden wir aber erst in einiger Zeit klären können – bitte also noch etwas Geduld !
Die nachfolgenden Beispiele zeigen Euch die am häufigsten genutzten Verschlüsselungsverfahren auf Basis des „Advanced Encryption Standard“ oder auch kurz AES. Die Seiten werden nach und nach freigeschaltet – falls Euch etwas fehlt, meldet Euch oder wartet noch etwas :-).
Da die symmetrische Verschlüsselung viele verschiedene Verfahren und Ausprägungen hat, findet Ihr diese auf 2 Menüpunkten verteilt. Solltet Ihr auf der Suche nach einer (relativ) sicheren Variante sein, so schaut Euch die beiden Beispiele B15 AES Modus GCM Kein Padding Zufalls-GCM Nonce Aad PBKDF2 Base64-Kodierung String und B16 AES Modus GCM Kein Padding Zufalls-GCM Nonce Aad PBKDF2 Base64-Kodierung File an – diese beiden Beispiele erfüllen sehr viele sicherheitsrelevante Punkte.
Alle Quellcodes zur symmetrischen Verschlüsselung findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/B-Symmetrische-Verschluesselung. Dort findet Ihr auch die Versionen für Java 11.
Solltet Ihr Euch unsicher sein, welche Schlüssellängen bei Euch zum Einsatz kommen sollen, hilft Euch u.a. das deutsche Bundesamt für Sicherheit in der Informationstechnik (BSI) weiter. Aktuell findet Ihr unter dem Link https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html eine PDF-Datei, welche Euch wertvolle Hinweise zu dieser Fragstellung gibt.
Ein Hinweis zum Quellcode der Beispiele: die Namen der Variablen und Methoden ist in Englisch gehalten, eine Bedeutungserklärung und Übersetzung ins Deutsche findet Ihr nachfolgend:
Name der Variablen | Übersetzung | Speichertyp |
String plaintextString | Klartext Daten | String |
byte[] plaintextByte | Klartext Daten | byte array |
byte[] ciphertextByte | Verschlüsselte Daten | byte array |
byte[] decryptedtextByte | entschlüsselte Daten | byte array |
String decryptedtextString | entschlüsselte Daten | String |
byte[] keyByte | Schlüssel | byte array |
byte[] ivByte | Initialisierungsvektor | byte array |
SecretKeySpec keySpec | Schlüssel in die richtige Form bringen | SecretKeySpec |
IvParameterSpec ivParameterSpec | Initialisierungsvektor in die richtige Form bringen | IvParameterSpec |
Cipher cipherAes | Verschlüsselungsroutine | Cipher |
String AESMODE_xxx | Verschlüsselungsmodus, z.B. AES/ECB/NOPADDING | String |
Letzte Aktualisierung: 18.01.2019