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)")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. CommonCrypto के माध्यम से असममित एन्क्रिप्शन (RSA)
RSA के लिए, CryptoKit सीधा API प्रदान नहीं करता है, लेकिन आप Security.framework और CommonCrypto का उपयोग कर सकते हैं
पुस्तकालय में भी
Kotlin में Markdown: लाइब्रेरीज़ और पार्सर गाइड
Event Bus और Observer पैटर्न JavaScript (Node.js) में — लचीली इवेंट-आधारित प्रणालियों का निर्माण
Swift में तिथियों के साथ काम करना: Foundation और DateFormatter
C++ में क्रिप्टोग्राफी: OpenSSL और Crypto++ के साथ एन्क्रिप्शन और हैश
RxJava Java: पूर्ण गाइड उदाहरणों के साथ