AES सममित एन्क्रिप्शन
Java के javax.crypto API से AES/CBC/PKCS5Padding का उपयोग करके संवेदनशील डेटा एन्क्रिप्ट और डिक्रिप्ट कीजिए
AES सममित एन्क्रिप्शन, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
सममित बनाम असममित एन्क्रिप्शन
सममित एन्क्रिप्शन में एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक ही कुंजी का उपयोग होता है (यह तेज़ है और बड़ी मात्रा में डेटा के लिए उपयुक्त है)। असममित एन्क्रिप्शन में सार्वजनिक और निजी कुंजी की जोड़ी का उपयोग होता है (यह धीमा है और कुंजी के आदान-प्रदान तथा हस्ताक्षरों के लिए उपयोग किया जाता है)। AES मानक सममित सिफ़र है।
AES मोड: CBC बनाम GCM
AES के कई मोड होते हैं। AES/CBC/PKCS5Padding सामान्य है, लेकिन इसमें प्रमाणीकरण नहीं होता। AES/GCM/NoPadding एन्क्रिप्शन और प्रमाणीकरण दोनों प्रदान करता है (AEAD) — नए कोड के लिए इसे दृढ़ता से प्राथमिकता दें।
AES कुंजी बनाना
256-बिट AES कुंजी को सुरक्षित रूप से बनाने के लिए KeyGenerator का उपयोग करें।
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(256); // 256-bit key
SecretKey key = kg.generateKey();
// Persist the key:
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());
// Restore the key:
byte[] decoded = Base64.getDecoder().decode(b64Key);
SecretKey restored = new SecretKeySpec(decoded, "AES");AES/GCM एन्क्रिप्शन
GCM मोड में प्रत्येक एन्क्रिप्शन के लिए एक अद्वितीय 12-बाइट आरंभीकरण वेक्टर (IV) आवश्यक होता है। प्रत्येक एन्क्रिप्शन क्रिया के लिए नया यादृच्छिक IV बनाएँ — एक ही कुंजी के साथ कभी भी IV का पुनः उपयोग न करें।
byte[] iv = new byte[12]; // 96-bit IV for GCM
new SecureRandom().nextBytes(iv);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(128, iv); // 128-bit auth tag
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
// Transmit/store: IV + ciphertext (IV is not secret)AES/GCM डिक्रिप्शन
संग्रहीत डेटा से IV निकालें, स्पेक को फिर से बनाएँ और डिक्रिप्ट करें। GCM स्वचालित रूप से प्रामाणिकता की जाँच करता है — छेड़ा गया डेटा AEADBadTagException उत्पन्न करता है।
// Assume stored = iv + ciphertext:
byte[] iv = Arrays.copyOfRange(stored, 0, 12);
byte[] ciphertext = Arrays.copyOfRange(stored, 12, stored.length);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] plaintext = cipher.doFinal(ciphertext); // throws if tamperedसिफरटेक्स्ट के साथ IV का संग्रहण
IV गुप्त नहीं होता — इसे सिफरटेक्स्ट के आगे या उसके साथ संग्रहित करें। डिक्रिप्ट करने के लिए प्राप्तकर्ता को IV की आवश्यकता होती है। कुंजी को गुप्त रखना आवश्यक है।
byte[] encryptedData = new byte[iv.length + ciphertext.length];
System.arraycopy(iv, 0, encryptedData, 0, iv.length);
System.arraycopy(ciphertext, 0, encryptedData, iv.length, ciphertext.length);
String b64 = Base64.getEncoder().encodeToString(encryptedData);पासवर्ड से कुंजी निकालना (PBKDF2)
पासवर्ड को कभी भी सीधे AES कुंजी के रूप में उपयोग न करें — उसकी एंट्रॉपी बहुत कम होती है। यादृच्छिक सॉल्ट और अधिक पुनरावृत्ति संख्या का उपयोग करके PBKDF2 से कुंजी निकालें।
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 310_000, 256);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
byte[] keyBytes = skf.generateSecret(spec).getEncoded();
SecretKey key = new SecretKeySpec(keyBytes, "AES");Java Security Provider का उपयोग करना
JDK का डिफ़ॉल्ट प्रोवाइडर AES को संभालता है। अतिरिक्त एल्गोरिदम या FIPS अनुपालन के लिए Bouncy Castle प्रोवाइडर का उपयोग करें।
// With Bouncy Castle:
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");एनवेलप एन्क्रिप्शन पैटर्न
डेटा को यादृच्छिक रूप से बनाई गई Data Encryption Key (DEK) से एन्क्रिप्ट करें। DEK को KMS (AWS KMS, HashiCorp Vault) में संग्रहित Key Encryption Key (KEK) से एन्क्रिप्ट करें। इससे कुंजी के उजागर होने का जोखिम सीमित होता है।
Spring ऐप्स में AES
Spring Security का TextEncryptor या Spring Security Crypto मॉड्यूल, Cipher/IV को मैन्युअल रूप से संभाले बिना उच्च-स्तरीय AES एन्क्रिप्शन प्रदान करता है।
TextEncryptor encryptor = Encryptors.text(password, salt);
String encrypted = encryptor.encrypt("sensitive data");
String decrypted = encryptor.decrypt(encrypted);सामान्य सावधानियाँ
कभी भी ये कार्य न करें: एक ही कुंजी के साथ IV का पुनः उपयोग, ECB मोड का उपयोग (जिससे पैटर्न सुरक्षित रहते हैं), पासवर्ड को सीधे कुंजी के रूप में उपयोग करना, या प्रमाणीकरण टैग को अनदेखा करना। नए कोड के लिए हमेशा GCM का उपयोग करें।
त्वरित जाँच
AES/CBC की तुलना में AES/GCM क्या प्रदान करता है?
पुनरावलोकन
प्रमाणित एन्क्रिप्शन के लिए AES/GCM/NoPadding का उपयोग करें। प्रत्येक एन्क्रिप्शन के लिए नया यादृच्छिक 12-बाइट IV बनाएँ। IV को सिफरटेक्स्ट के आगे जोड़ें। PBKDF2 से पासवर्डों से कुंजियाँ निकालें। एक ही कुंजी के साथ IV का कभी पुनः उपयोग न करें।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “AES सममित एन्क्रिप्शन” पाठ निःशुल्क है?
हाँ—“AES सममित एन्क्रिप्शन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“AES सममित एन्क्रिप्शन” में मैं क्या सीखूँगा?
Java के javax.crypto API से AES/CBC/PKCS5Padding का उपयोग करके संवेदनशील डेटा एन्क्रिप्ट और डिक्रिप्ट कीजिए आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“AES सममित एन्क्रिप्शन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- MessageDigest से क्रिप्टोग्राफ़िक हैशिंग
- AES सममित एन्क्रिप्शन
- संदेश अखंडता के लिए HMAC-SHA256
- JWT: संरचना, निर्माण और सत्यापन