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



Datensicherheit ist ein zentraler Aspekt der Entwicklung für iOS und macOS. Swift bietet leistungsstarke Werkzeuge für den kryptographischen Schutz: vom integrierten Framework CryptoKit (ab iOS 13 / macOS 10.15) bis zur low-level CommonCrypto (C-Bibliothek). In diesem Artikel behandeln wir die grundlegenden Operationen: symmetrische Verschlüsselung (AES), asymmetrische (RSA), Hashing (SHA-256) und Nachrichtenauthentifizierung (HMAC).



1. Projekteinrichtung



Für die Verwendung von CryptoKit sind keine zusätzlichen Einstellungen erforderlich – es ist Teil der Standardbibliothek Foundation. Wenn Sie mit CommonCrypto arbeiten, fügen Sie es in Bridging-Header (für Swift + ObjC) hinzu oder importieren Sie das Modul direkt:



// Für CommonCrypto in Swift 5+ kann verwendet werden:import CommonCrypto// Oder einen modularen Bridge (modulemap) einrichten


2. Symmetrische Verschlüsselung (AES-GCM) mit CryptoKit



CryptoKit bietet eine hochwertige API für AES im GCM-Modus (Galois/Counter Mode) – eine sichere und einfache Verschlüsselungsmethode.



import CryptoKitimport Foundation

// Funktion zum Verschlüsseln eines Stringsfunc encryptString(_ plaintext: String, using key: SymmetricKey) throws -> Data { let plaintextData = plaintext.data(using: .utf8)! let sealedBox = try AES.GCM.seal(plaintextData, using: key) return sealedBox.combined! // combined = nonce + ciphertext + tag}

// Funktion zum Entschlüsselnfunc decryptData(_ combinedData: Data, using key: SymmetricKey) throws -> String { let sealedBox = try AES.GCM.SealedBox(combined: combinedData) let decryptedData = try AES.GCM.open(sealedBox, using: key) return String(data: decryptedData, encoding: .utf8)!}

// Beispiel zur Verwendunglet key = SymmetricKey(size: .bits256) // 256-Bit-Schlüssellet original = "Geheime Nachricht für iOS"let encrypted = try encryptString(original, using: key)print("Verschlüsselt: \\(encrypted.base64EncodedString())")

let decrypted = try decryptData(encrypted, using: key)print("Entschlüsselt: \\(decrypted)")


Wichtig: SymmetricKey wird zufällig generiert. Für eine echte Anwendung muss der Schlüssel in Keychain gespeichert oder Secure Enclave verwendet werden.



3. Hashing (SHA-256) und HMAC



Hashing ist eine Einwegfunktion, die für die Überprüfung der Datenintegrität und die Speicherung von Passwörtern unverzichtbar ist. CryptoKit unterstützt SHA-256, SHA-384, SHA-512.



import CryptoKit

func sha256Hash(of data: Data) -> String { let digest = SHA256.hash(data: data) return digest.compactMap { String(format: "%02x", $0) }.joined()}

// Beispiel für einen Stringlet message = "Hallo, Swift Crypto!"let hash = sha256Hash(of: message.data(using: .utf8)!)print("SHA-256: \\(hash)")


Für die Nachrichtenauthentifizierung (HMAC) verwenden Sie HMAC mit einem Schlüssel:



func hmacSHA256(key: SymmetricKey, data: Data) -> Data {    let authenticationCode = HMAC<SHA256>.authenticationCode(for: data, using: key)    return Data(authenticationCode)}

let hmacKey = SymmetricKey(size: .bits256)let hmacResult = hmacSHA256(key: hmacKey, data: "Wichtige Daten".data(using: .utf8)!)print("HMAC: \\(hmacResult.base64EncodedString())")


4. Asymmetrische Verschlüsselung (RSA) über das Security-Framework



Für RSA verwenden Sie das Framework Security (SecKey). CryptoKit unterstützt RSA nicht direkt, aber Sie können Ansätze kombinieren.



import Security

// Generierung eines RSA-Schlüsselpaares (2048 Bit)func generateRSAKeyPair() -> (privateKey: SecKey, publicKey: SecKey)? { let attributes: [String: Any] = [ kSecAttrKeyType as String: kSecAttrKeyTypeRSA, kSecAttrKeySizeInBits as String: 2048, kS

Empfehlungen