পিডিএফ ডকুমেন্টে ডিজিটাল সিগনেচার (Digital Signature) যোগ করা একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা পিডিএফ ফাইলের অখণ্ডতা এবং স্বীকৃতিকে নিশ্চিত করে। PDFBox ব্যবহার করে আপনি Java দিয়ে পিডিএফ ডকুমেন্টে ডিজিটাল সিগনেচার যোগ করতে পারেন। ডিজিটাল সিগনেচারটি সাধারণত একটি সার্টিফিকেট এবং প্রাইভেট কী (Private Key) ব্যবহার করে করা হয়।
প্রয়োজনীয় লাইব্রেরি
ডিজিটাল সিগনেচার যোগ করার জন্য BouncyCastle লাইব্রেরি ব্যবহার করতে হয়। BouncyCastle একটি ওপেন সোর্স ক্রিপ্টোগ্রাফিক লাইব্রেরি যা পিডিএফে ডিজিটাল সিগনেচার যোগ করতে সাহায্য করে। PDFBox এর সাথে BouncyCastle লাইব্রেরি ইনস্টল করা প্রয়োজন।
- Maven ডিপেনডেন্সি: যদি আপনি Maven ব্যবহার করেন, তাহলে
pom.xmlফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.28</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpg-jdk15on</artifactId>
<version>1.70</version>
</dependency>
ডিজিটাল সিগনেচার যোগ করার কোড উদাহরণ
নিচে একটি উদাহরণ দেওয়া হলো, যেখানে একটি পিডিএফ ডকুমেন্টে ডিজিটাল সিগনেচার যোগ করা হচ্ছে।
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDSignature;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDRectangle;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.security.Signature;
import java.security.Security;
public class PDFSignatureExample {
public static void main(String[] args) throws Exception {
// BouncyCastle পদ্ধতি সংযুক্ত করা
Security.addProvider(new BouncyCastleProvider());
// পিডিএফ ডকুমেন্ট লোড করা
PDDocument document = PDDocument.load(new File("input.pdf"));
// পিডিএফে সিগনেচার অ্যাড করা
PDSignature signature = new PDSignature();
// ডিজিটাল সিগনেচারের অবস্থান এবং আকার
signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
signature.setSignDate(Calendar.getInstance());
document.addSignature(signature);
// কীস্টোর থেকে প্রাইভেট কী এবং সার্টিফিকেট লোড করা
KeyStore keyStore = KeyStore.getInstance("PKCS12");
char[] password = "password".toCharArray();
keyStore.load(new FileInputStream("path_to_keystore.p12"), password);
PrivateKey privateKey = (PrivateKey) keyStore.getKey("alias", password);
X509Certificate certificate = (X509Certificate) keyStore.getCertificate("alias");
// সিগনেচার তৈরি করা
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initSign(privateKey);
sig.update("Signature data".getBytes());
byte[] signedData = sig.sign();
// সিগনেচার যোগ করা
PDDocumentCatalog catalog = document.getDocumentCatalog();
catalog.setSignature(signature);
// পিডিএফ ডকুমেন্টে সিগনেচার অ্যাড করা
FileOutputStream fos = new FileOutputStream("signed_pdf.pdf");
document.saveIncremental(fos);
document.close();
}
}
কোড ব্যাখ্যা
- BouncyCastle প্রোভাইডার:
Security.addProvider(new BouncyCastleProvider())লাইনের মাধ্যমে BouncyCastle প্রোভাইডার যোগ করা হয়, যা ডিজিটাল সিগনেচার প্রক্রিয়ায় সাহায্য করে।
- PDSignature সেটিংস:
PDSignatureঅবজেক্ট তৈরি করে সিগনেচারের ফিল্টার এবং সাবফিল্টার সেট করা হয়। এখানেPDSignature.FILTER_ADOBE_PPKLITEএবংPDSignature.SUBFILTER_ADBE_PKCS7_DETACHEDব্যবহার করা হয়েছে।
- KeyStore থেকে প্রাইভেট কী এবং সার্টিফিকেট লোড করা:
KeyStoreক্লাস ব্যবহার করে.p12ফরম্যাটের কীস্টোর থেকে প্রাইভেট কী এবং সার্টিফিকেট লোড করা হয়েছে।
- সিগনেচার সাইনিং:
Signatureক্লাস ব্যবহার করে সিগনেচার তৈরি এবং প্রাইভেট কী দিয়ে তা সাইন করা হয়েছে।
- পিডিএফে সিগনেচার অ্যাড করা:
document.addSignature(signature)দিয়ে পিডিএফ ডকুমেন্টে সিগনেচার যোগ করা হয়।
সিগনেচার ভেরিফিকেশন
ডিজিটাল সিগনেচার যোগ করার পর, আপনি যদি সিগনেচারটি যাচাই করতে চান, তবে নিচের কোডটি ব্যবহার করতে পারেন:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDSignature;
import org.apache.pdfbox.signature.SignatureVerifier;
public class VerifySignature {
public static void main(String[] args) throws Exception {
PDDocument document = PDDocument.load(new File("signed_pdf.pdf"));
PDSignature signature = document.getSignature(0);
SignatureVerifier verifier = new SignatureVerifier();
boolean isValid = verifier.verify(signature);
if (isValid) {
System.out.println("Signature is valid.");
} else {
System.out.println("Signature is not valid.");
}
document.close();
}
}
এভাবে PDFBox এবং BouncyCastle ব্যবহার করে পিডিএফ ডকুমেন্টে ডিজিটাল সিগনেচার যোগ করা সম্ভব। আপনি আপনার প্রয়োজন অনুযায়ী সার্টিফিকেট, প্রাইভেট কী এবং পিডিএফ ডকুমেন্টের সাথে সিগনেচার সম্পন্ন করতে পারবেন।
Read more