Symmetric এবং Asymmetric Encryption এর সংমিশ্রণ

Hybrid Encryption Techniques - জাভা ক্রিপ্টোগ্রাফি (Java Cryptography) - Java Technologies

331

Hybrid Encryption হল একটি ক্রিপ্টোগ্রাফি কৌশল যেখানে symmetric encryption এবং asymmetric encryption একসাথে ব্যবহৃত হয়। এই কৌশলটি সেরা দুটি বৈশিষ্ট্য ব্যবহার করে: symmetric encryption এর দ্রুততা এবং asymmetric encryption এর নিরাপত্তা। Hybrid Encryption সাধারণত public key cryptography এবং private key cryptography এর শক্তিশালী বৈশিষ্ট্যগুলিকে একত্রিত করে, যার ফলে একটি শক্তিশালী এবং নিরাপদ ডেটা এনক্রিপশন ব্যবস্থা তৈরি করা যায়।

Hybrid Encryption কীভাবে কাজ করে?

Hybrid Encryption সাধারণত নিম্নলিখিত ধাপে কাজ করে:

  1. Symmetric Key Generation:
    • প্রথমে একটি random symmetric key (সাধারণত AES key) তৈরি করা হয়। এটি symmetric encryption ব্যবহার করে ডেটা এনক্রিপ্ট করতে ব্যবহৃত হবে।
  2. Data Encryption:
    • এই symmetric key ব্যবহার করে ডেটা এনক্রিপ্ট করা হয়, কারণ symmetric encryption দ্রুত এবং কম্পিউটেশনালভাবে কার্যকরী।
  3. Asymmetric Encryption:
    • পরে, public key encryption (যেমন RSA) ব্যবহার করে এই symmetric key এনক্রিপ্ট করা হয় এবং প্রাপককে পাঠানো হয়। এটি প্রাপকের public key দিয়ে এনক্রিপ্ট করা হয়।
  4. Decryption Process:
    • প্রাপক তার private key ব্যবহার করে সিমেট্রিক কী ডিক্রিপ্ট করে এবং তারপর symmetric decryption ব্যবহার করে মূল ডেটা ডিক্রিপ্ট করে।

এভাবে, symmetric encryption দ্রুত ডেটা এনক্রিপ্ট করতে ব্যবহৃত হয়, এবং asymmetric encryption কেবলমাত্র সিমেট্রিক কী-এর নিরাপদ পরিবহন নিশ্চিত করতে ব্যবহৃত হয়।

Hybrid Encryption এর উদাহরণ

Java Cryptography API ব্যবহার করে Hybrid Encryption এর একটি বাস্তব উদাহরণ দেখানো হল। এখানে AES (symmetric encryption) এবং RSA (asymmetric encryption) ব্যবহার করা হয়েছে।

Java Example: Hybrid Encryption Using AES and RSA

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.util.Base64;

public class HybridEncryptionExample {

    // Method to encrypt data using AES (Symmetric Encryption)
    public static String encryptDataWithAES(String data, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    // Method to decrypt data using AES (Symmetric Decryption)
    public static String decryptDataWithAES(String encryptedData, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedData = cipher.doFinal(decodedData);
        return new String(decryptedData);
    }

    // Method to encrypt AES key using RSA (Asymmetric Encryption)
    public static String encryptAESKeyWithRSA(SecretKey secretKey, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedKey = cipher.doFinal(secretKey.getEncoded());
        return Base64.getEncoder().encodeToString(encryptedKey);
    }

    // Method to decrypt AES key using RSA (Asymmetric Decryption)
    public static SecretKey decryptAESKeyWithRSA(String encryptedKey, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decodedKey = Base64.getDecoder().decode(encryptedKey);
        byte[] decryptedKey = cipher.doFinal(decodedKey);
        return new SecretKeySpec(decryptedKey, "AES");
    }

    public static void main(String[] args) throws Exception {
        // Step 1: Generate AES (symmetric key)
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);  // AES key size
        SecretKey secretKey = keyGenerator.generateKey();

        // Step 2: Encrypt data using AES
        String originalData = "This is a secret message!";
        String encryptedData = encryptDataWithAES(originalData, secretKey);
        System.out.println("Encrypted Data (AES): " + encryptedData);

        // Step 3: Generate RSA key pair (for asymmetric encryption)
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);  // RSA key size
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        // Step 4: Encrypt the AES key with RSA
        String encryptedAESKey = encryptAESKeyWithRSA(secretKey, publicKey);
        System.out.println("Encrypted AES Key (RSA): " + encryptedAESKey);

        // Step 5: Decrypt the AES key using RSA
        SecretKey decryptedAESKey = decryptAESKeyWithRSA(encryptedAESKey, privateKey);

        // Step 6: Decrypt the data using AES
        String decryptedData = decryptDataWithAES(encryptedData, decryptedAESKey);
        System.out.println("Decrypted Data: " + decryptedData);
    }
}

ব্যাখ্যা:

  1. AES (Symmetric Key) Generation:
    • AES এনক্রিপশনের জন্য প্রথমে একটি সিক্রেট কী তৈরি করা হয়।
  2. Encrypt Data using AES:
    • AES ব্যবহার করে মূল ডেটা এনক্রিপ্ট করা হয়।
  3. RSA (Asymmetric Key) Generation:
    • একটি RSA key pair তৈরি করা হয় — পাবলিক কী এবং প্রাইভেট কী।
  4. Encrypt AES Key with RSA:
    • RSA ব্যবহার করে সিক্রেট AES key এনক্রিপ্ট করা হয়, যাতে এটি নিরাপদে পাঠানো যায়।
  5. Decrypt AES Key with RSA:
    • প্রাপক তার private key ব্যবহার করে AES কী ডিক্রিপ্ট করে।
  6. Decrypt Data using AES:
    • ডিক্রিপ্ট করা AES key ব্যবহার করে মূল ডেটা ডিক্রিপ্ট করা হয়।

Output:

Encrypted Data (AES): l6XVrtdHlgz9O2d4BhZ1Sw==
Encrypted AES Key (RSA): N9s41lzz6zW8OBczX0flm2wUbG6qU0qkzB1SMp+RhfyQLTc8ZXyF6Ne2i5VbJgQUHt7erf/UvmAC3OK0Q5paZ01iUOpgI5IF+Ce6Jp...
Decrypted Data: This is a secret message!

Hybrid Encryption এর সুবিধা

  1. দ্রুততা: Symmetric encryption দ্রুত এবং কম্পিউটেশনাল শক্তি কম ব্যবহার করে। এটি ছোট ডেটা সেটের জন্য আদর্শ।
  2. নিরাপত্তা: Asymmetric encryption ব্যবহৃত হওয়ার কারণে, সিক্রেট কী নিরাপদে শেয়ার করা যায় এবং ডেটার নিরাপত্তা নিশ্চিত হয়।
  3. key exchange: Public Key Cryptography দ্বারা সিক্রেট কী নিরাপদভাবে এক্সচেঞ্জ করা যায়।
  4. পাঠযোগ্যতা: Base64 এনকোডিং ব্যবহার করে ডেটা পাঠযোগ্য এবং পাঠানো সহজ হয়।

Hybrid Encryption হল একটি শক্তিশালী এবং নিরাপদ ক্রিপ্টোগ্রাফিক কৌশল, যেখানে symmetric এবং asymmetric encryption একত্রিত করে ডেটার গোপনীয়তা এবং নিরাপত্তা নিশ্চিত করা হয়। AES এবং RSA এর সংমিশ্রণ হাইব্রিড এনক্রিপশন সিস্টেমে ব্যাপকভাবে ব্যবহৃত হয়। এই পদ্ধতি সাধারণত digital signatures, secure email, file encryption এবং secure communication তে ব্যবহৃত হয়। Java Cryptography API ব্যবহার করে এটি সহজেই বাস্তবায়ন করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...