Kryptographie in Swift: Verschlüsselung und Hashing für iOS/macOS

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 Swift (iOS/macOS): Verschlüsselung und Hashing



In der modernen Entwicklung für iOS und macOS ist Datensicherheit eine der obersten Prioritäten. Apple bietet leistungsstarke integrierte Werkzeuge für den kryptographischen Schutz: vom einfachen Hashing bis zur asymmetrischen Verschlüsselung. In diesem Artikel betrachten wir, wie man CryptoKit (das empfohlene Framework ab iOS 13 / macOS 10.15) und das klassische CommonCrypto für typische Aufgaben einsetzt: Verschlüsselung, Hashing und Datenauthentifizierung.



Grundlegende Konzepte

Bevor wir zum Code übergehen, klären wir die Begriffe:

  • Symmetrische Verschlüsselung – Ein Schlüssel wird sowohl zum Verschlüsseln als auch zum Entschlüsseln verwendet (z. B. AES).
  • Asymmetrische Verschlüsselung – Ein Schlüsselpaar: ein öffentlicher (zum Verschlüsseln) und ein privater (zum Entschlüsseln).
  • Hashing – Eine irreversible Umwandlung von Daten in eine Zeichenkette fester Länge (SHA-256).
  • HMAC – Ein hashbasierter Nachrichtenauthentifizierungscode unter Verwendung eines Schlüssels.


1. Hashing mit CryptoKit

CryptoKit ist ein modernes Swift-Framework, das Kryptographie einfach und sicher macht. Für das Hashing wird die Struktur SHA256 verwendet.



import CryptoKit

func hashString(_ input: String) -> String { let inputData = Data(input.utf8) let hashed = SHA256.hash(data: inputData) return hashed.compactMap { String(format: "%02x", $0) }.joined()}

// Beispiel zur Verwendunglet password = "MySecurePass123"let hash = hashString(password)print("SHA-256 Hash: \\(hash)")


Ebenfalls verfügbar sind SHA384, SHA512 und SHA1 (letzteres nur aus Kompatibilitätsgründen).



2. HMAC (Nachrichtenauthentifizierung)

HMAC fügt dem Hash einen Schlüssel hinzu, was vor Fälschung schützt. In CryptoKit wird dies über HMAC mit Angabe des Algorithmus implementiert:



import CryptoKit

func hmacSHA256(key: SymmetricKey, message: String) -> String { let messageData = Data(message.utf8) let code = HMAC<SHA256>.authenticationCode(for: messageData, using: key) return code.compactMap { String(format: "%02x", $0) }.joined()}

// Schlüsselgenerierunglet key = SymmetricKey(size: .bits256)let hmac = hmacSHA256(key: key, message: "Wichtige Nachricht")print("HMAC: \\(hmac)")


3. Symmetrische Verschlüsselung (AES-GCM)

AES-GCM ist ein moderner Verschlüsselungsmodus, der sowohl Vertraulichkeit als auch Authentifizierung bietet (verhindert Datenmanipulation). CryptoKit unterstützt ihn von Haus aus.



import CryptoKit

func encryptAESGCM(plainText: String, key: SymmetricKey) throws -> Data { let plainData = Data(plainText.utf8) let sealedBox = try AES.GCM.seal(plainData, using: key) return sealedBox.combined! // combined = nonce + ciphertext + tag}

func decryptAESGCM(encryptedData: Data, key: SymmetricKey) throws -> String { let sealedBox = try AES.GCM.SealedBox(combined: encryptedData) let decryptedData = try AES.GCM.open(sealedBox, using: key) return String(data: decryptedData, encoding: .utf8)!}

// Beispiellet key = SymmetricKey(size: .bits256)let originalText = "Geheime Daten"

do { let encrypted = try encryptAESGCM(plainText: originalText, key: key) let decrypted = try decryptAESGCM(encryptedData: encrypted, key: key) print("Entschlüsselt: \\(decrypted)")} catch { print("Fehler: \\(error)")}


Wichtig: combined enthält alles, was für die Entschlüsselung benötigt wird (nonce, ciphertext, tag). Bewahren Sie es zusammen mit den verschlüsselten Daten auf.



4. Asymmetrische Verschlüsselung (RSA) über CommonCrypto

Für RSA bietet CryptoKit keine direkte API, aber man kann Security.framework und CommonCrypto verwenden.

Empfehlungen