Kryptographie in Java: Verschlüsselung und Hashing – vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Kryptographie in Java: Verschlüsselung und Hashing – ausführlicher Leitfaden



In der modernen Welt der Informationssicherheit ist Kryptographie die Grundlage des Datenschutzes. Java bietet ein leistungsstarkes integriertes Toolkit zur Implementierung von Verschlüsselung und Hashing über die Pakete javax.crypto und java.security. In diesem Artikel betrachten wir die wichtigsten kryptographischen Operationen in Java im Detail: symmetrische und asymmetrische Verschlüsselung, Passwort-Hashing und die Arbeit mit digitalen Signaturen.



1. Grundlagen der Kryptographie in Java

Die Java Cryptography Architecture (JCA) ist ein Framework, das Entwicklern die einfache Integration kryptographischer Algorithmen ermöglicht. Schlüsselklassen:

  • javax.crypto.Cipher – für Ver- und Entschlüsselung.
  • java.security.MessageDigest – für Hashing.
  • java.security.KeyPairGenerator – zur Schlüsselerzeugung.
  • javax.crypto.spec.SecretKeySpec – zur Erstellung symmetrischer Schlüssel.

Für die Arbeit mit Kryptographie importieren Sie:

import javax.crypto.*;import javax.crypto.spec.*;import java.security.*;


2. Symmetrische Verschlüsselung (AES)

Symmetrische Verschlüsselung verwendet einen einzigen Schlüssel für Ver- und Entschlüsselung. AES (Advanced Encryption Standard) ist der beliebteste Algorithmus. Beispiel für die Verschlüsselung einer Zeichenkette:

import javax.crypto.*;import javax.crypto.spec.*;import java.util.Base64;

public class AesExample { public static void main(String[] args) throws Exception { String plainText = "Geheime Nachricht"; String secretKey = "0123456789abcdef"; // 16 Bytes für AES-128

// Schlüsselerstellung SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

// Verschlüsselung cipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] encryptedBytes = cipher.doFinal(plainText.getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("Verschlüsselt: " + encryptedText);

// Entschlüsselung cipher.init(Cipher.DECRYPT_MODE, keySpec); byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText)); String decryptedText = new String(decryptedBytes); System.out.println("Entschlüsselt: " + decryptedText); }}

Wichtig: Der Modus ECB wird für große Datenmengen nicht empfohlen. Verwenden Sie AES/GCM/NoPadding für bessere Sicherheit.



3. Asymmetrische Verschlüsselung (RSA)

Asymmetrische Verschlüsselung verwendet ein Schlüsselpaar: einen öffentlichen (zum Verschlüsseln) und einen privaten (zum Entschlüsseln). RSA ist der klassische Algorithmus. Beispiel:

import javax.crypto.*;import java.security.*;import java.util.Base64;

public class RsaExample { public static void main(String[] args) throws Exception { // Generierung eines Schlüsselpaares KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); KeyPair pair = keyGen.generateKeyPair(); PublicKey publicKey = pair.getPublic(); PrivateKey privateKey = pair.getPrivate();

// Verschlüsselung mit öffentlichem Schlüssel Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] encryptedBytes = cipher.doFinal("Geheime Daten".getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("RSA-verschlüsselt: " + encryptedText);

// Entschlüsselung mit privatem Schlüssel cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));

Empfehlungen