जावा में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग - विस्तृत गाइड
आज के सूचना सुरक्षा के युग में, क्रिप्टोग्राफी डेटा सुरक्षा की नींव है। Java javax.crypto और java.security पैकेजों के माध्यम से एन्क्रिप्शन और हैशिंग को लागू करने के लिए एक शक्तिशाली अंतर्निहित टूलकिट प्रदान करता है। इस लेख में, हम Java में मुख्य क्रिप्टोग्राफिक ऑपरेशनों पर विस्तार से चर्चा करेंगे: सममित और असममित एन्क्रिप्शन, पासवर्ड हैशिंग और डिजिटल हस्ताक्षर के साथ काम करना।
1. जावा में क्रिप्टोग्राफी की मूल बातें
Java Cryptography Architecture (JCA) एक फ्रेमवर्क है जो डेवलपर्स को क्रिप्टोग्राफिक एल्गोरिदम को आसानी से एकीकृत करने की अनुमति देता है। मुख्य क्लासेस:
javax.crypto.Cipher— एन्क्रिप्शन और डिक्रिप्शन के लिए।java.security.MessageDigest— हैशिंग के लिए।java.security.KeyPairGenerator— कुंजी उत्पन्न करने के लिए।javax.crypto.spec.SecretKeySpec— सममित कुंजी बनाने के लिए।
क्रिप्टोग्राफी के साथ काम करने के लिए इम्पोर्ट करें:
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.*;
2. सममित एन्क्रिप्शन (AES)
सममित एन्क्रिप्शन एन्क्रिप्शन और डिक्रिप्शन दोनों के लिए एक ही कुंजी का उपयोग करता है। AES (Advanced Encryption Standard) सबसे लोकप्रिय एल्गोरिदम है। स्ट्रिंग को एन्क्रिप्ट करने का उदाहरण:
import javax.crypto.*;
import javax.crypto.spec.*;
import java.util.Base64;
public class AesExample {
public static void main(String[] args) throws Exception {
String plainText = "गोपनीय संदेश";
String secretKey = "0123456789abcdef"; // AES-128 के लिए 16 बाइट
// कुंजी बनाना
SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// एन्क्रिप्शन
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("एन्क्रिप्टेड: " + encryptedText);
// डिक्रिप्शन
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("डिक्रिप्टेड: " + decryptedText);
}
}
महत्वपूर्ण: बड़े डेटा के लिए ECB मोड अनुशंसित नहीं है। बेहतर सुरक्षा के लिए AES/GCM/NoPadding का उपयोग करें।
3. असममित एन्क्रिप्शन (RSA)
असममित एन्क्रिप्शन कुंजियों की एक जोड़ी का उपयोग करता है: सार्वजनिक (एन्क्रिप्शन के लिए) और निजी (डिक्रिप्शन के लिए)। RSA एक क्लासिक एल्गोरिदम है। उदाहरण:
import javax.crypto.*;
import java.security.*;
import java.util.Base64;
public class RsaExample {
public static void main(String[] args) throws Exception {
// कुंजी जोड़ी उत्पन्न करना
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
PublicKey publicKey = pair.getPublic();
PrivateKey privateKey = pair.getPrivate();
// सार्वजनिक कुंजी से एन्क्रिप्शन
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal("गोपनीय डेटा".getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("RSA एन्क्रिप्टेड: " + encryptedText);
// निजी कुंजी से डिक्रिप्शन
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
System.out.println("डिक्रिप्टेड: " + new String(decryptedBytes));