Kotlin में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग
Kotlin, JVM के लिए एक आधुनिक भाषा होने के नाते, Java Cryptography Architecture (JCA) की सभी क्षमताओं तक पहुँच प्रदान करता है। यह सममित (AES, DES) और असममित (RSA) एन्क्रिप्शन, साथ ही क्रिप्टोग्राफिक हैश फ़ंक्शन (SHA-256, MD5) और डिजिटल हस्ताक्षरों को लागू करने की अनुमति देता है। इस लेख में, हम Kotlin में क्रिप्टोग्राफी के व्यावहारिक उदाहरणों पर चर्चा करेंगे जो वेब एप्लिकेशन, मोबाइल डेवलपमेंट और बैकएंड सेवाओं में डेटा सुरक्षा के लिए उपयोगी होंगे।
सभी कोड उदाहरण Java की अंतर्निहित क्षमताओं का उपयोग करते हैं, जो उन्हें क्रॉस-प्लेटफ़ॉर्म बनाता है और अतिरिक्त लाइब्रेरी की आवश्यकता नहीं होती है।
1. Kotlin में सममित AES एन्क्रिप्शन
सममित एन्क्रिप्शन एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक ही कुंजी का उपयोग करता है। AES (Advanced Encryption Standard) एल्गोरिथ्म सुरक्षा का स्वर्ण मानक है। आइए CBC मोड और PKCS5Padding का उपयोग करके एक स्ट्रिंग को एन्क्रिप्ट करने का उदाहरण देखें।
import javax.crypto.Cipherimport javax.crypto.KeyGeneratorimport javax.crypto.SecretKeyimport javax.crypto.spec.IvParameterSpecimport javax.crypto.spec.SecretKeySpecimport java.util.Base64
fun generateAESKey(): SecretKey { val keyGen = KeyGenerator.getInstance("AES") keyGen.init(256) // कुंजी की लंबाई: 128, 192 या 256 बिट return keyGen.generateKey()}
fun encryptAES(plainText: String, secretKey: SecretKey, iv: ByteArray): String { val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") val ivSpec = IvParameterSpec(iv) cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec) val encrypted = cipher.doFinal(plainText.toByteArray()) return Base64.getEncoder().encodeToString(encrypted)}
fun decryptAES(encryptedText: String, secretKey: SecretKey, iv: ByteArray): String { val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") val ivSpec = IvParameterSpec(iv) cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec) val decoded = Base64.getDecoder().decode(encryptedText) val decrypted = cipher.doFinal(decoded) return String(decrypted)}
fun main() { val key = generateAESKey() val iv = ByteArray(16) // इनिशियलाइज़ेशन वेक्टर (AES के लिए 16 बाइट) // वास्तविक प्रोजेक्ट में iv को यादृच्छिक होना चाहिए और सिफरटेक्स्ट के साथ भेजा जाना चाहिए val original = "नमस्ते, Kotlin!" val encrypted = encryptAES(original, key, iv) val decrypted = decryptAES(encrypted, key, iv) println("मूल: $original") println("एन्क्रिप्टेड: $encrypted") println("डिक्रिप्टेड: $decrypted")}महत्वपूर्ण: इनिशियलाइज़ेशन वेक्टर (IV) प्रत्येक एन्क्रिप्शन के लिए यादृच्छिक होना चाहिए और एन्क्रिप्टेड डेटा के साथ खुले तौर पर भेजा जाना चाहिए। प्रोडक्शन में कभी भी फिक्स्ड IV का उपयोग न करें।
2. Kotlin में असममित RSA एन्क्रिप्शन
RSA कुंजियों की एक जोड़ी का उपयोग करता है: एन्क्रिप्शन के लिए सार्वजनिक (public) और डिक्रिप्शन के लिए निजी (private)। यह पक्षों के बीच सुरक्षित डेटा ट्रांसफर के लिए आदर्श है।
import java.security.KeyPairGeneratorimport java.security.PrivateKeyimport java.security.PublicKeyimport javax.crypto.Cipherimport java.util.Base64
fun generateRSAKeyPair(): Pair<PublicKey, PrivateKey> { val keyGen = KeyPairGenerator.getInstance("RSA") keyGen.initialize(2048) // अनुशंसित कुंजी आकार val keyPair = keyGen.generateKeyPair() return Pair(keyPair.public, keyPair.private)}
fun encryptRSA(plainText: String, publicKey: PublicKey): String { val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.ENCRYPT_MODE, publicKey) val encrypted = cipher.doFinal(plainText.toByteArray()) return Base64.getEncoder().encodeToString(encrypted)}
fun decryptRSA(encryptedText: String, privateKey: PrivateKey): String { val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.DECRYPT_MODE, privateKey