Bouncy Castle für Java: Vollständige Anleitung zu Kryptographie und Verschlüsselung
1. Was ist Bouncy Castle und wozu braucht man es?
Bouncy Castle (oft einfach BC genannt) ist eine der leistungsstärksten und am weitesten verbreiteten Kryptographie-Bibliotheken für die Java-Plattform (und .NET). Sie bietet Entwicklern ein umfangreiches API zur Implementierung von Verschlüsselung, digitalen Signaturen, Hashing, Schlüsselerzeugung und der Arbeit mit Zertifikaten. Im Gegensatz zur standardmäßigen Java Cryptography Extension (JCE) unterstützt Bouncy Castle eine viel größere Anzahl von Algorithmen, darunter viele veraltete, experimentelle und selten genutzte, was es zu einem unverzichtbaren Werkzeug für Sicherheitsexperten und Entwickler macht, die mit nicht-standardisierten Protokollen arbeiten.
Warum braucht man es? Erstens enthält die Standard-Java-Bibliothek (JCA/JCE) nicht viele moderne und spezialisierte Algorithmen (z. B. Twofish, Serpent, GOST, SM2/SM3/SM4). Bouncy Castle schließt diese Lücke. Zweitens bietet es eine "schlanke" (Lightweight API) Implementierung, die keine Installation eines Security-Providers in der globalen JVM erfordert – ideal für eingebettete Systeme und Anwendungen, bei denen Isolation wichtig ist. Drittens wird die Bibliothek aktiv gepflegt, durchläuft Sicherheitsaudits und ist der De-facto-Standard für viele Open-Source-Projekte (z. B. OpenSSL für Java).
Bouncy Castle besteht aus zwei Hauptkomponenten: dem Provider (bcprov-jdk18on), der in die Java-Sicherheitsarchitektur integriert wird, und den PKIX/CMS/SMIME/TLS-Paketen (bcpkix-jdk18on, bcmail-jdk18on, bctls-jdk18on), die hochrangige Protokolle wie S/MIME, TLS und die Arbeit mit X.509-Zertifikaten implementieren. Dieser Artikel konzentriert sich auf den Kern der Bibliothek – den Provider und sein Lightweight-API.
2. Installation
Bouncy Castle wird über Maven Central verteilt. Fügen Sie für die Verwendung in einem Java-Projekt (Maven, Gradle, SBT) die folgenden Abhängigkeiten zu Ihrer Build-Datei hinzu.
Für Maven (pom.xml):
<!-- Haupt-Provider (erforderlich) -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.78.1</version> <!-- Aktuelle Version auf mvnrepository.com prüfen -->
</dependency>
<!-- Für Zertifikate, CMS, S/MIME (optional) -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.78.1</version>
</dependency>
Für Gradle (build.gradle):
implementation 'org.bouncycastle:bcprov-jdk18on:1.78.1'
implementation 'org.bouncycastle:bcpkix-jdk18on:1.78.1' // Optional
Wichtig: Wenn Sie ältere Java-Versionen (vor 8) verwenden, benötigen Sie die Version bcprov-jdk15on. Für Java 8+ verwenden Sie bcprov-jdk18on. Nach dem Hinzufügen der Abhängigkeit müssen Sie den Provider im Code registrieren (wenn Sie das Standard-JCE-API verwenden) oder direkt mit dem Lightweight-API arbeiten.
3. Schnellstart – Minimales funktionierendes Beispiel
Ein einfaches Beispiel: Verschlüsselung eines Strings mit dem AES-256-Algorithmus im GCM-Modus (authentifizierte Verschlüsselung) über das Lightweight-API.
import org.bouncycastle.crypto.*;
import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.crypto.modes.GCMBlockCipher;
import org.bouncycastle.crypto.params.*;
import org.bouncycastle.util.encoders.Hex;
import java.security.SecureRandom;
public class QuickStart {
public static void main(String[] args) throws Exception {
// 1. Schlüssel und IV (Initialisierungsvektor) generieren
SecureRandom secureRandom = new SecureRandom();
byte[] keyBytes Auch in der Bibliothek
PHPMailer für PHP: Komplettguide mit Praxisbeispielen
Arbeiten mit Excel in Swift auf iOS und macOS: Bibliotheken und Beispiele
Elasticsearch-Client für Java: Vollständige Anleitung zur Verbindung und Arbeit
Cython für C++: Komplettguide mit Beispielen
remeda für TypeScript: Komplettguide mit Beispielen