التشفير في Swift: التشفير والتجزئة لنظامي iOS/macOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التشفير في Swift (iOS/macOS): التشفير والتجزئة



في التطوير الحديث لنظامي iOS وmacOS، تعتبر أمان البيانات من الأولويات الرئيسية. توفر Apple أدوات مدمجة قوية للحماية التشفيرية: من التجزئة البسيطة إلى التشفير غير المتماثل. في هذه المقالة، سنستعرض كيفية استخدام CryptoKit (الإطار الموصى به بدءًا من iOS 13 / macOS 10.15) و CommonCrypto الكلاسيكي لحل المهام النموذجية: التشفير، التجزئة، والتحقق من صحة البيانات.



المفاهيم الأساسية

قبل الانتقال إلى الكود، دعنا نفهم المصطلحات:

  • التشفير المتماثل — يتم استخدام مفتاح واحد لكل من التشفير وفك التشفير (مثل AES).
  • التشفير غير المتماثل — زوج من المفاتيح: مفتاح عام (للتشفير) ومفتاح خاص (لفك التشفير).
  • التجزئة — تحويل البيانات بشكل لا رجعة فيه إلى سلسلة ذات طول ثابت (SHA-256).
  • HMAC — رمز مصادقة الرسالة المعتمد على التجزئة باستخدام مفتاح.


1. التجزئة باستخدام CryptoKit

CryptoKit هو إطار Swift حديث يجعل التشفير بسيطًا وآمنًا. للتجزئة، يتم استخدام الهيكل 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()}

// مثال الاستخدامlet password = "MySecurePass123"let hash = hashString(password)print("SHA-256 hash: \\(hash)")


كما تتوفر SHA384 و SHA512 و SHA1 (الأخير للتوافق فقط).



2. HMAC (مصادقة الرسالة)

يضيف HMAC مفتاحًا إلى التجزئة، مما يحمي من التزوير. في CryptoKit، يتم ذلك عبر HMAC مع تحديد الخوارزمية:



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

// توليد المفتاحlet key = SymmetricKey(size: .bits256)let hmac = hmacSHA256(key: key, message: "رسالة مهمة")print("HMAC: \\(hmac)")


3. التشفير المتماثل (AES-GCM)

AES-GCM هو وضع تشفير حديث يوفر السرية والمصادقة (يمنع التلاعب بالبيانات). يدعمه CryptoKit بشكل مدمج.



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

// مثالlet key = SymmetricKey(size: .bits256)let originalText = "بيانات سرية"

do { let encrypted = try encryptAESGCM(plainText: originalText, key: key) let decrypted = try decryptAESGCM(encryptedData: encrypted, key: key) print("تم فك التشفير: \\(decrypted)")} catch { print("خطأ: \\(error)")}


هام: combined يتضمن كل ما هو ضروري لفك التشفير (nonce, ciphertext, tag). قم بتخزينه مع البيانات المشفرة.



4. التشفير غير المتماثل (RSA) عبر CommonCrypto

بالنسبة لـ RSA، لا يوفر CryptoKit واجهة برمجة تطبيقات مباشرة، ولكن يمكن استخدام Security.framework و CommonCrypto

توصيات