Java Cryptography Extension

Framework für kryptographische Aufgaben
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 31. März 2010 um 09:11 Uhr durch Sebastian.Dietrich (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Dieser Artikel wurde zur Löschung vorgeschlagen.

Falls du Autor des Artikels bist, lies dir bitte durch, was ein Löschantrag bedeutet, und entferne diesen Hinweis nicht.

Zur Löschdiskussion.

Relevanz dieser Software (dieses Paketchens) erschließt sich nicht, --He3nry Disk. 17:34, 29. Mär. 2010 (CEST)


Die Java Cryptography Extension (JCE) ist eine Java Programmierschnittstelle und Framework für kryptographische Aufgaben wie Verschlüsselung, Kommunikations-Authentifizierung und Schlüsselverwaltung. Seit dem JDK 1.4 ist sie Teil der Java Platform, Standard Edition, davor war sie (ab JDK 1.2) als optionales Paket erhältlich.

Die Java Cryptography Extension basiert auf derselben Architektur wie die Java Cryptography Architecture (JCA) und wird als Teil der JCA gesehen. Die Aufteilung in JCA und JCE hat historische Gründe, die aus den Exportrestriktionen der USA für kryptographische Systeme resultieren: Starke Verschlüsselungsalgorithmen unterlagen den Exportrestriktionen und wurden in die JCE "ausgelagert", die JCA enthält keine Verschlüsselungsalgorithmen, sondern Hashfunktionen, Keygeneratoren etc. und unterlag daher nicht den Exportrestriktionen.

Die Klassen der JCE sind (wie die Klassen der JCA) unter den Packages java.security und java.crypto zu finden.

Funktionalität

Die JCE basiert auf sogenannten Kryptographie Providern, das sind Implementierungen von verschiedenen, durch die JCE abstrahierten kryptographischen Konzepten. Neue Konzepte können leicht hinzugefügt werden.

Die JCS bietet folgende Funktionalitäten:

  • Cypher - Kryptographische Algorithmen (symmetrische und asymmetrische) zum Verschlüsseln, Block- und Streamcypher
  • Key Management - KeyGeneratoren für die Schlüsselgenerierung, KeyAgreement zum sicheren Aushandeln von Schlüsseln sowie SecretKeyFactory zur Zerlegung von Schlüsseln in ihre Anteile
  • MessageAuthenticationCodes - zur Berechnung von Authentifizierungen für Kommunikationen
  • Sichere Objekte und Digitale Signaturen

Beispiel

Das folgende Beispiel zeigt die Verschlüsselung und Entschlüsselung eines Strings mittels Blowfish Algorithmus:

  ...
  Cipher cipher = Cipher.getInstance("Blowfish");
  cipher.init(Cipher.ENCRYPT_MODE, KeyGenerator.getInstance("Blowfish").generateKey());
  
  // Umwandlung des Strings nach Bytes basierend auf UTF-8
  byte[] utf8Bytes = "Zu verschlüsselnder String".getBytes("UTF8");
  
  // Verschlüsselung
  byte[] encryptedBytes = cipher.doFinal(utf8Bytes);
  
  // Base64 encoding um wieder einen String zu bekommen
  String encryptedString = new sun.misc.BASE64Encoder().encode(encryptedBytes);
  
  // Schlüssel für Entschlüsselung vorbereiten
  cipher.init(Cipher.DECRYPT_MODE, KeyGenerator.getInstance("Blowfish").generateKey());
  
  // Rückumwandlung in Byte-Array
  encryptedBytes = new sun.misc.BASE64Decoder().decodeBuffer(encryptedString);
  
  // Entschlüsselung
  utf8Bytes = cipher.doFinal(dec);
  
  // Rückumwandlung in einen String
  return new String(utf8Bytes, "UTF8");
  ...

Literatur