Symmetrische AES-Verschlüsselung
Verschlüsseln und entschlüsseln Sie vertrauliche Daten mit AES/CBC/PKCS5Padding über die Java-API javax.crypto.
Symmetrische AES-Verschlüsselung ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Symmetrische vs. asymmetrische Verschlüsselung
Bei der symmetrischen Verschlüsselung wird derselbe Schlüssel zum Ver- und Entschlüsseln verwendet (schnell, geeignet für große Datenmengen). Bei der asymmetrischen Verschlüsselung wird ein öffentliches/privates Schlüsselpaar verwendet (langsamer, für Schlüsselaustausch und Signaturen). AES ist die Standards chiffre für symmetrische Verschlüsselung.
AES-Modi: CBC vs. GCM
AES verfügt über mehrere Modi. AES/CBC/PKCS5Padding ist weit verbreitet, bietet aber keine Authentifizierung. AES/GCM/NoPadding bietet sowohl Verschlüsselung als auch Authentifizierung (AEAD) – für neuen Code dringend zu bevorzugen.
AES-Schlüssel generieren
Verwenden Sie KeyGenerator, um sicher einen 256-Bit-AES-Schlüssel zu generieren.
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(256); // 256-bit key
SecretKey key = kg.generateKey();
// Persist the key:
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());
// Restore the key:
byte[] decoded = Base64.getDecoder().decode(b64Key);
SecretKey restored = new SecretKeySpec(decoded, "AES");AES/GCM-Verschlüsselung
Der GCM-Modus erfordert für jede Verschlüsselung einen eindeutigen 12-Byte-Initialisierungsvektor (IV). Generieren Sie für jeden Verschlüsselungsvorgang einen neuen zufälligen IV – verwenden Sie niemals denselben IV mit demselben Schlüssel erneut.
byte[] iv = new byte[12]; // 96-bit IV for GCM
new SecureRandom().nextBytes(iv);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(128, iv); // 128-bit auth tag
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
// Transmit/store: IV + ciphertext (IV is not secret)AES/GCM-Entschlüsselung
Extrahieren Sie den IV aus den gespeicherten Daten, erstellen Sie die Spezifikation neu und entschlüsseln Sie die Daten. GCM überprüft die Authentizität automatisch – manipulierte Daten lösen eine AEADBadTagException aus.
// Assume stored = iv + ciphertext:
byte[] iv = Arrays.copyOfRange(stored, 0, 12);
byte[] ciphertext = Arrays.copyOfRange(stored, 12, stored.length);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] plaintext = cipher.doFinal(ciphertext); // throws if tamperedIV mit dem Chiffretext speichern
Der IV ist nicht geheim – speichern Sie ihn vor dem Chiffretext oder zusammen mit ihm. Der Empfänger benötigt den IV zum Entschlüsseln. Der Schlüssel muss geheim gehalten werden.
byte[] encryptedData = new byte[iv.length + ciphertext.length];
System.arraycopy(iv, 0, encryptedData, 0, iv.length);
System.arraycopy(ciphertext, 0, encryptedData, iv.length, ciphertext.length);
String b64 = Base64.getEncoder().encodeToString(encryptedData);Schlüsselableitung aus Passwörtern (PBKDF2)
Verwenden Sie niemals ein Passwort direkt als AES-Schlüssel – seine Entropie ist zu gering. Leiten Sie mit PBKDF2 unter Verwendung eines zufälligen Salts und einer hohen Anzahl von Iterationen einen Schlüssel ab.
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 310_000, 256);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
byte[] keyBytes = skf.generateSecret(spec).getEncoded();
SecretKey key = new SecretKeySpec(keyBytes, "AES");Java-Sicherheits-Provider verwenden
Der Standard-Provider des JDK unterstützt AES. Für zusätzliche Algorithmen oder die FIPS-Konformität verwenden Sie den Bouncy-Castle-Provider.
// With Bouncy Castle:
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");Envelope-Encryption-Muster
Verschlüsseln Sie Daten mit einem zufällig generierten Data Encryption Key (DEK). Verschlüsseln Sie den DEK mit einem Key Encryption Key (KEK), der in einem KMS (AWS KMS, HashiCorp Vault) gespeichert ist. Dadurch wird die Gefährdung von Schlüsseln begrenzt.
AES in Spring-Anwendungen
TextEncryptor von Spring Security oder das Spring-Security-Crypto-Modul bietet eine einfache AES-Verschlüsselung, ohne dass Sie Cipher/IV manuell verwalten müssen.
TextEncryptor encryptor = Encryptors.text(password, salt);
String encrypted = encryptor.encrypt("sensitive data");
String decrypted = encryptor.decrypt(encrypted);Häufige Fehler
Vermeiden Sie unbedingt: die Wiederverwendung eines IV mit demselben Schlüssel, den ECB-Modus (Muster bleiben erhalten), die direkte Verwendung eines Passworts als Schlüssel und das Ignorieren des Authentifizierungs-Tags. Verwenden Sie für neuen Code immer GCM.
Kurzer Test
Was bietet AES/GCM, das AES/CBC nicht bietet?
Zusammenfassung
Verwenden Sie AES/GCM/NoPadding für authentifizierte Verschlüsselung. Generieren Sie pro Verschlüsselung einen neuen zufälligen 12-Byte-IV. Stellen Sie den IV dem Chiffretext voran. Leiten Sie Schlüssel aus Passwörtern mit PBKDF2 ab. Verwenden Sie niemals denselben IV mit demselben Schlüssel erneut.
Häufig gestellte Fragen
Ist die Lektion „Symmetrische AES-Verschlüsselung“ kostenlos?
Ja — der vollständige Text von „Symmetrische AES-Verschlüsselung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Symmetrische AES-Verschlüsselung“?
Verschlüsseln und entschlüsseln Sie vertrauliche Daten mit AES/CBC/PKCS5Padding über die Java-API javax.crypto. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Symmetrische AES-Verschlüsselung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Kryptografisches Hashing mit MessageDigest
- Symmetrische AES-Verschlüsselung
- HMAC-SHA256 für Nachrichtenintegrität
- JWT: Struktur, Erstellung und Überprüfung