Apache POI লাইব্রেরি মূলত Microsoft Office ডকুমেন্টগুলোর সাথে কাজ করার জন্য ব্যবহৃত হয়। তবে, Digital Signatures এবং Document Authentication এর মতো নিরাপত্তা বিষয়ক কাজের জন্য Apache POI সরাসরি সমর্থন প্রদান করে না। কিন্তু কিছু external লাইব্রেরি ব্যবহার করে Apache POI এর সাথে digital signature যুক্ত করা এবং ডকুমেন্টের authentication করা সম্ভব।
Digital Signatures মূলত ডকুমেন্টের সার্বিক নিরাপত্তা নিশ্চিত করতে ব্যবহৃত হয়। এটি একটি এনক্রিপ্টেড কোড যা প্রমাণ করে যে ডকুমেন্টটি একটি নির্দিষ্ট ব্যক্তি দ্বারা সই করা হয়েছে এবং ডকুমেন্টটি অপরিবর্তিত রয়েছে।
ডিজিটাল সই সাধারণত Public Key Infrastructure (PKI) এর মাধ্যমে তৈরি করা হয়, যেখানে দুটি কী ব্যবহৃত হয়:
ডকুমেন্টে সই করার পরে, এটি প্রমাণ করে যে ডকুমেন্টটি কোনো একটি নির্দিষ্ট ব্যক্তির তৈরি এবং তাতে কোনো পরিবর্তন করা হয়নি।
Apache POI লাইব্রেরি সরাসরি Digital Signature যোগ করার কাজ করে না। তবে, আপনি BouncyCastle বা Apache Santuario এর মতো বাইরের লাইব্রেরি ব্যবহার করে ডিজিটাল সিগনেচার তৈরি এবং যাচাই করতে পারেন।
BouncyCastle হল একটি ওপেন সোর্স লাইব্রেরি যা cryptographic operations এর জন্য সমর্থন প্রদান করে, যেমন digital signatures তৈরি করা। এটি Java এর মাধ্যমে সহজে ব্যবহার করা যেতে পারে।
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.IOUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.io.*;
import java.security.*;
import java.security.cert.X509Certificate;
import java.util.Arrays;
public class DigitalSignatureExample {
public static void main(String[] args) {
try {
// BouncyCastle Provider এড করা
Security.addProvider(new BouncyCastleProvider());
// একটি KeyPair তৈরি করা (Private এবং Public Key)
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// ডকুমেন্ট তৈরি
XWPFDocument document = new XWPFDocument();
FileOutputStream fos = new FileOutputStream("DigitalSignedDocument.docx");
document.write(fos);
fos.close();
// ডিজিটাল সিগনেচার তৈরি করা
byte[] docBytes = IOUtils.toByteArray(new FileInputStream("DigitalSignedDocument.docx"));
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(keyPair.getPrivate());
signature.update(docBytes);
byte[] digitalSignature = signature.sign();
// সিগনেচার সংরক্ষণ
FileOutputStream signatureFile = new FileOutputStream("DocumentSignature.sig");
signatureFile.write(digitalSignature);
signatureFile.close();
System.out.println("Digital Signature added successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এটি শুধু সিগনেচার তৈরির একটি উদাহরণ। সিগনেচার যাচাই করার জন্য আপনাকে Public Key ব্যবহার করতে হবে।
ডকুমেন্টের প্রমাণীকরণ নিশ্চিত করার জন্য Digital Signatures অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। যখন একটি ডকুমেন্টে ডিজিটাল সিগনেচার যোগ করা হয়, তখন তা নিশ্চিত করে যে:
ডকুমেন্টের সঠিকতা যাচাই করতে, আপনি পাবলিক কী ব্যবহার করে ডিজিটাল সিগনেচার যাচাই করতে পারেন।
import java.io.*;
import java.security.*;
import java.security.cert.X509Certificate;
import java.util.Arrays;
public class VerifyDigitalSignature {
public static void main(String[] args) {
try {
// Public Key লোড করা (যেটি signer থেকে পাওয়া যাবে)
FileInputStream fis = new FileInputStream("public_key.pem");
byte[] publicKeyBytes = fis.readAllBytes();
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyBytes));
// সিগনেচার লোড করা
FileInputStream sigFis = new FileInputStream("DocumentSignature.sig");
byte[] signatureBytes = sigFis.readAllBytes();
// ডকুমেন্ট লোড করা
FileInputStream docFis = new FileInputStream("DigitalSignedDocument.docx");
byte[] docBytes = docFis.readAllBytes();
// সিগনেচার যাচাই
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicKey);
signature.update(docBytes);
boolean isSignatureValid = signature.verify(signatureBytes);
if (isSignatureValid) {
System.out.println("Digital Signature is valid!");
} else {
System.out.println("Digital Signature is invalid!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
এই উদাহরণে, আপনি Public Key ব্যবহার করে ডকুমেন্টের সিগনেচার যাচাই করছেন।
Apache POI মূলত Microsoft Word ডকুমেন্টে কাজ করার জন্য ব্যবহৃত হলেও, Digital Signature এবং Document Authentication যোগ করার জন্য বাইরের লাইব্রেরি যেমন BouncyCastle ব্যবহার করা হয়। ডিজিটাল সিগনেচার ডকুমেন্টের নিরাপত্তা নিশ্চিত করতে সহায়ক, এবং এটি ডকুমেন্টের প্রকৃততা যাচাই করতে ব্যবহৃত হয়। যদিও Apache POI সরাসরি এই ফিচারটি সমর্থন করে না, তবে বাইরের ক্রিপ্টোগ্রাফিক লাইব্রেরি ব্যবহার করে আপনি digital signature তৈরি এবং যাচাই করতে পারবেন।
common.read_more