Swift में क्रिप्टोग्राफी (iOS/macOS): एन्क्रिप्शन और हैशिंग
iOS और macOS के आधुनिक विकास में, डेटा सुरक्षा एक महत्वपूर्ण पहलू है। Swift क्रिप्टोग्राफी के लिए शक्तिशाली अंतर्निहित उपकरण प्रदान करता है, निम्न-स्तरीय CommonCrypto (C-API) से लेकर आधुनिक फ्रेमवर्क CryptoKit (iOS 13+/macOS 10.15+) तक। इस लेख में, हम Swift डेवलपर के लिए उपलब्ध एन्क्रिप्शन और हैशिंग के मुख्य तरीकों पर चर्चा करेंगे।
1. हैशिंग (Hashing)
हैशिंग डेटा का एक निश्चित लंबाई की स्ट्रिंग में एकतरफा रूपांतरण है। इसका उपयोग डेटा अखंडता की जांच और पासवर्ड (नमक के साथ) संग्रहीत करने के लिए किया जाता है।
CryptoKit के साथ उदाहरण (SHA-256)
import CryptoKit
func hashSHA256(_ input: String) -> String { let inputData = Data(input.utf8) let hashed = SHA256.hash(data: inputData) return hashed.compactMap { String(format: "%02x", $0) }.joined()}
// उपयोगlet hash = hashSHA256("Hello, Swift!")print("SHA-256: \\(hash)")// आउटपुट: 8e3a... (64 वर्ण)CommonCrypto के साथ उदाहरण (MD5, पुराना)
नोट: MD5 सुरक्षा के लिए अनुशंसित नहीं है, लेकिन अखंडता नियंत्रण के लिए उपयोग किया जा सकता है।
import CommonCrypto
func md5Hash(_ input: String) -> String { let data = Data(input.utf8) var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) data.withUnsafeBytes { bytes in _ = CC_MD5(bytes.baseAddress, CC_LONG(data.count), &digest) } return digest.map { String(format: "%02x", $0) }.joined()}2. सममित एन्क्रिप्शन (AES-GCM)
सममित एन्क्रिप्शन एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक कुंजी का उपयोग करता है। CryptoKit एक सुरक्षित AES-GCM (Galois/Counter Mode) कार्यान्वयन प्रदान करता है।
CryptoKit के साथ एन्क्रिप्शन और डिक्रिप्शन का उदाहरण
import CryptoKit
func encryptAESGCM(plaintext: String, key: SymmetricKey) throws -> Data { let plaintextData = Data(plaintext.utf8) let sealedBox = try AES.GCM.seal(plaintextData, using: key) return sealedBox.combined! // combined = nonce + ciphertext + tag}
func decryptAESGCM(ciphertext: Data, key: SymmetricKey) throws -> String { let sealedBox = try AES.GCM.SealedBox(combined: ciphertext) let decryptedData = try AES.GCM.open(sealedBox, using: key) return String(data: decryptedData, encoding: .utf8)!}
// उपयोगlet key = SymmetricKey(size: .bits256) // 256-बिट कुंजीlet encrypted = try encryptAESGCM(plaintext: "गुप्त संदेश", key: key)let decrypted = try decryptAESGCM(ciphertext: encrypted, key: key)print("डिक्रिप्ट किया गया: \\(decrypted)")3. असममित एन्क्रिप्शन (RSA)
असममित एन्क्रिप्शन कुंजियों की एक जोड़ी का उपयोग करता है: सार्वजनिक (एन्क्रिप्शन के लिए) और निजी (डिक्रिप्शन के लिए)। iOS/macOS में RSA के साथ काम करने के लिए Security.framework और SecKey का उपयोग किया जाता है।
RSA कुंजी उत्पादन और एन्क्रिप्शन का उदाहरण
import Security
func generateRSAKeyPair() -> (privateKey: SecKey, publicKey: SecKey)? { let attributes: [String: Any] = [ kSecAttrKeyType as String: kSecAttrKeyTypeRSA, kSecAttrKeySizeInBits as String: 2048, kSecPrivateKeyAttrs as String: [kSecAttrIsPermanent as String: false], kSecPublicKeyAttrs as String: [kSecAttrIsPermanent as String: false] ] guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, nil) else { return nil } let publicKey = SecKeyCopyPublicKey(privateKey)! return (privateKey, publicKey)}
func encryptRSA(plaintext: String, publicKey: SecKey) -> Data? { let plaintextData = Data(plaintext.utf8) var error: Unmanaged<CFError>? guard let ciphertext = SecKeyCreateEncryptedData( publicKey, .rsaEncryptionPKCS1, plaintextData as CFData,