Cryptographie en Swift : chiffrement et hachage pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Cryptographie en Swift (iOS/macOS) : chiffrement et hachage



Dans le développement moderne pour iOS et macOS, la sécurité des données est l'une des priorités clés. Apple fournit des outils intégrés puissants pour la protection cryptographique : du simple hachage au chiffrement asymétrique. Dans cet article, nous allons voir comment utiliser CryptoKit (framework recommandé depuis iOS 13 / macOS 10.15) et le classique CommonCrypto pour résoudre des tâches typiques : chiffrement, hachage et authentification des données.



Concepts de base

Avant de passer au code, clarifions les termes :

  • Chiffrement symétrique — une seule clé est utilisée pour le chiffrement et le déchiffrement (par exemple, AES).
  • Chiffrement asymétrique — une paire de clés : une publique (pour le chiffrement) et une privée (pour le déchiffrement).
  • Hachage — transformation irréversible des données en une chaîne de longueur fixe (SHA-256).
  • HMAC — code d'authentification de message basé sur un hachage avec utilisation d'une clé.


1. Hachage avec CryptoKit

CryptoKit est un framework Swift moderne qui rend la cryptographie simple et sécurisée. Pour le hachage, on utilise la structure SHA256.



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()}

// Exemple d'utilisationlet password = "MySecurePass123"let hash = hashString(password)print("SHA-256 hash : \\(hash)")


Également disponibles : SHA384, SHA512 et SHA1 (ce dernier uniquement pour compatibilité).



2. HMAC (authentification de message)

HMAC ajoute une clé au hachage, ce qui protège contre la falsification. Dans CryptoKit, cela est implémenté via HMAC avec spécification de l'algorithme :



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()}

// Génération de la clélet key = SymmetricKey(size: .bits256)let hmac = hmacSHA256(key: key, message: "Message important")print("HMAC : \\(hmac)")


3. Chiffrement symétrique (AES-GCM)

AES-GCM est un mode de chiffrement moderne qui assure à la fois la confidentialité et l'authentification (empêche la falsification des données). CryptoKit le prend en charge nativement.



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)!}

// Exemplelet key = SymmetricKey(size: .bits256)let originalText = "Données secrètes"

do { let encrypted = try encryptAESGCM(plainText: originalText, key: key) let decrypted = try decryptAESGCM(encryptedData: encrypted, key: key) print("Déchiffré : \\(decrypted)")} catch { print("Erreur : \\(error)")}


Important : combined inclut tout le nécessaire pour le déchiffrement (nonce, ciphertext, tag). Conservez-le avec les données chiffrées.



4. Chiffrement asymétrique (RSA) via CommonCrypto

Pour RSA, CryptoKit ne fournit pas d'API directe, mais on peut utiliser Security.framework et CommonCrypto

Recommendations