जावा में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग – व्यावहारिक मार्गदर्शिका

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग – पूर्ण मार्गदर्शिका



क्रिप्टोग्राफी आधुनिक अनुप्रयोगों की सुरक्षा की मूलभूत नींव है। जावा में एन्क्रिप्शन और हैशिंग के साथ काम करने के लिए एक शक्तिशाली और लचीला बुनियादी ढांचा बनाया गया है — Java Cryptography Architecture (JCA) और Java Cryptography Extension (JCE)। ये लाइब्रेरीज़ सममित (AES) और असममित (RSA) एन्क्रिप्शन के साथ-साथ क्रिप्टोग्राफ़िक हैशिंग (SHA-256) को लागू करने की अनुमति देती हैं। इस लेख में हम प्रमुख अवधारणाओं को समझेंगे और शुद्ध जावा (बिना किसी तीसरे पक्ष की निर्भरता के) में काम करने वाले उदाहरण लिखेंगे।



मूल अवधारणाएँ और JCA/JCE आर्किटेक्चर

JCA क्रिप्टोग्राफ़िक संचालन के साथ काम करने के लिए एक ढाँचा प्रदान करता है। मुख्य विचार प्रदाता (providers) है, जो विशिष्ट एल्गोरिदम को लागू करते हैं। डिफ़ॉल्ट रूप से, JDK में प्रदाता SUN (हैश के लिए) और SunJCE (एन्क्रिप्शन के लिए) शामिल हैं। मुख्य क्लासेज़ पैकेज javax.crypto और java.security में हैं।

  • Cipher — एन्क्रिप्शन और डिक्रिप्शन के लिए मुख्य क्लास।
  • KeyGenerator — सममित कुंजियाँ उत्पन्न करना।
  • KeyPairGenerator — असममित एन्क्रिप्शन के लिए कुंजी जोड़े उत्पन्न करना।
  • MessageDigest — हैश योग की गणना करना।
  • SecretKeySpec — बाइट सरणी से सममित कुंजी का प्रतिनिधित्व।


सममित एन्क्रिप्शन: AES

AES (Advanced Encryption Standard) सबसे लोकप्रिय सममित एल्गोरिदम है। एन्क्रिप्शन और डिक्रिप्शन के लिए एक ही कुंजी का उपयोग करता है। अनुशंसित मोड GCM (प्रमाणित एन्क्रिप्शन) या PKCS5Padding के साथ CBC है। नीचे AES-256/GCM का उपयोग करके स्ट्रिंग एन्क्रिप्शन का उदाहरण दिया गया है।



import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.GCMParameterSpec;import java.security.SecureRandom;import java.util.Base64;

public class AESGCMExample { private static final int AES_KEY_SIZE = 256; private static final int GCM_IV_LENGTH = 12; private static final int GCM_TAG_LENGTH = 128;

public static SecretKey generateKey() throws Exception { KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(AES_KEY_SIZE, SecureRandom.getInstanceStrong()); return keyGen.generateKey(); }

public static String encrypt(String plaintext, SecretKey key) throws Exception { byte[] iv = new byte[GCM_IV_LENGTH]; SecureRandom.getInstanceStrong().nextBytes(iv); Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); GCMParameterSpec spec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); cipher.init(Cipher.ENCRYPT_MODE, key, spec); byte[] cipherText = cipher.doFinal(plaintext.getBytes()); byte[] encrypted = new byte[iv.length + cipherText.length]; System.arraycopy(iv, 0, encrypted, 0, iv.length); System.arraycopy(cipherText, 0, encrypted, iv.length, cipherText.length); return Base64.getEncoder().encodeToString(encrypted); }

public static String decrypt(String encryptedData, SecretKey key) throws Exception { byte[] decoded = Base64.getDecoder().decode(encryptedData); byte[] iv = new byte[GCM_IV_LENGTH]; System.arraycopy(decoded, 0, iv, 0, iv.length); byte[] cipherText = new byte[decoded.length - iv.length]; System.arraycopy(decoded, iv.length, cipherText, 0, cipherText.length); Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); GCMParameterSpec spec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); cipher.init(Cipher.DECRYPT_MODE, key, spec); return new String(cipher.doFinal(cipherText)); }

public static void main(String[] args) throws Exception { SecretKey key = generateKey()

अनुशंसाएँ