উদাহরণ সহ XML Encryption এবং Security

XML Encryption এবং Security - জাভা এক্সএমএল (Java XML) - Java Technologies

268

Java তে XML Encryption এবং Security সম্পর্কিত কার্যকারিতা সম্পাদন করতে Java Cryptography Extension (JCE) এবং XML Encryption API ব্যবহার করা হয়। XML Encryption এবং Security একটি XML ডকুমেন্টের নিরাপত্তা নিশ্চিত করতে ব্যবহৃত হয়, যেখানে ডেটা গোপন রাখতে বা ডেটার অখণ্ডতা নিশ্চিত করতে XML ডকুমেন্টের অংশ বা পুরো ডকুমেন্টকে এনক্রিপ্ট বা ডিজিটাল সাইন করা হয়।

1. XML Encryption

XML Encryption একটি পদ্ধতি যার মাধ্যমে XML ডকুমেন্টের নির্দিষ্ট অংশ যেমন XML উপাদান বা অ্যাট্রিবিউট এনক্রিপ্ট করা হয়। এর মাধ্যমে XML ডেটাকে সুরক্ষিত করা যায় যাতে unauthorized ব্যবহারকারী এটি পড়তে বা পরিবর্তন করতে না পারে।

2. XML Digital Signature

XML Digital Signature XML ডকুমেন্টের অখণ্ডতা এবং বৈধতা নিশ্চিত করতে ব্যবহৃত হয়। এটি XML ডকুমেন্টে ডিজিটাল সাইন যোগ করে, যা নিশ্চিত করে যে ডকুমেন্টে কোনো পরিবর্তন করা হয়নি এবং তা নির্দিষ্ট একটি ব্যক্তির বা প্রতিষ্ঠানের দ্বারা সই করা হয়েছে।

উদাহরণ:

নিচে একটি উদাহরণ দেয়া হলো যা XML Encryption এবং XML Digital Signature ব্যবহার করে XML ডেটাকে সুরক্ষিত করার পদ্ধতি প্রদর্শন করবে।

1. XML ডকুমেন্ট (input.xml)

<invoice>
    <invoiceNumber>12345</invoiceNumber>
    <customerName>John Doe</customerName>
    <amount>1500</amount>
</invoice>

2. XML Encryption (Java কোড)

XML ডকুমেন্টের একটি নির্দিষ্ট অংশ (যেমন amount উপাদান) এনক্রিপ্ট করার জন্য JCE এবং XML Encryption API ব্যবহার করা হয়। এখানে আমরা একটি প্রাথমিক এনক্রিপশন উদাহরণ দেখাচ্ছি:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.crypto.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.io.*;

public class XMLEncryptionExample {
    public static void main(String[] args) throws Exception {
        // XML ডকুমেন্ট লোড করা
        File inputFile = new File("input.xml");
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(inputFile);

        // এনক্রিপ্ট করার জন্য Key তৈরি করা
        String key = "1234567890123456";  // 16-byte key
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");

        // এনক্রিপ্ট করা উপাদান নির্বাচন (এখানে 'amount')
        Node amountNode = document.getElementsByTagName("amount").item(0);
        String amountValue = amountNode.getTextContent();

        // AES এনক্রিপশন প্রক্রিয়া
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedAmount = cipher.doFinal(amountValue.getBytes());

        // এনক্রিপ্ট করা মান Base64 এ রূপান্তর করা
        String encryptedBase64 = Base64.getEncoder().encodeToString(encryptedAmount);
        amountNode.setTextContent(encryptedBase64);

        // পরিবর্তিত XML ডকুমেন্ট আউটপুট করা
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult(new File("encrypted_output.xml")));

        System.out.println("XML Encryption Complete.");
    }
}

3. XML Digital Signature (Java কোড)

XML ডকুমেন্টের ডিজিটাল সাইন করতে Java তে XML Signature API ব্যবহার করা হয়। নিচে একটি উদাহরণ দেয়া হলো:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.security.*;
import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.spec.*;
import javax.xml.crypto.dsig.keyinfo.*;
import javax.xml.crypto.*;
import java.io.*;
import java.security.cert.*;

public class XMLDigitalSignatureExample {
    public static void main(String[] args) throws Exception {
        // XML ডকুমেন্ট লোড করা
        File inputFile = new File("input.xml");
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(inputFile);

        // সাইনিং কীগুলি প্রস্তুত করা
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        // সাইনিং প্রক্রিয়া
        DOMSignContext signContext = new DOMSignContext(keyPair.getPrivate(), document.getDocumentElement());
        XMLSignatureFactory signatureFactory = XMLSignatureFactory.getInstance("DOM");

        // সাইনিং সেটআপ
        Reference reference = signatureFactory.newReference("#invoiceNumber", signatureFactory.newDigestMethod(DigestMethod.SHA256, null));
        SignedInfo signedInfo = signatureFactory.newSignedInfo(
            signatureFactory.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null),
            signatureFactory.newSignatureMethod(SignatureMethod.RSA_SHA256, null),
            Collections.singletonList(reference)
        );

        KeyInfoFactory keyInfoFactory = signatureFactory.getKeyInfoFactory();
        KeyInfo keyInfo = keyInfoFactory.newKeyInfo(Collections.singletonList(keyInfoFactory.newX509Data(Collections.singletonList("CN=Test"))));

        XMLSignature signature = signatureFactory.newXMLSignature(signedInfo, keyInfo);

        // XML ডকুমেন্টে সাইন যোগ করা
        signature.sign(signContext);

        // পরিবর্তিত XML ডকুমেন্ট আউটপুট করা
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult(new File("signed_output.xml")));

        System.out.println("XML Digital Signature Complete.");
    }
}

ব্যাখ্যা:

  1. XML Encryption:
    • XML ডকুমেন্টের একটি নির্দিষ্ট অংশ যেমন amount এনক্রিপ্ট করা হয়েছে। এটি AES এনক্রিপশন পদ্ধতি ব্যবহার করে সুরক্ষিত করা হয়েছে।
    • এনক্রিপ্ট করার পর, এনক্রিপ্ট করা ডেটা Base64 এ রূপান্তরিত করা হয়েছে এবং XML ডকুমেন্টে সেই এনক্রিপ্ট করা মান স্থাপন করা হয়েছে।
  2. XML Digital Signature:
    • একটি RSA কিপেয়ার ব্যবহার করে XML ডকুমেন্টে ডিজিটাল সাইন যোগ করা হয়েছে। সাইনিংয়ের জন্য SHA-256 হ্যাশিং এলগরিদম এবং RSA সাইনিং এলগরিদম ব্যবহার করা হয়েছে।
    • এটি ডকুমেন্টের অখণ্ডতা এবং বৈধতা নিশ্চিত করে, যাতে ডকুমেন্টের কোনো পরিবর্তন হলে সাইন ভেঙে যাবে।
  • XML Encryption এবং XML Digital Signature XML ডেটাকে সুরক্ষিত করার জন্য গুরুত্বপূর্ণ প্রযুক্তি। এগুলি ডেটার গোপনীয়তা, অখণ্ডতা এবং বৈধতা নিশ্চিত করতে ব্যবহৃত হয়। Java তে এই প্রযুক্তিগুলি কার্যকরভাবে ব্যবহার করা যায় JCE এবং XML Signature API এর মাধ্যমে, যা ডেভেলপারদের নিরাপদ XML ডেটা ট্রান্সফরমেশন এবং কমিউনিকেশন নিশ্চিত করতে সহায়তা করে।
Content added By
Promotion

Are you sure to start over?

Loading...