Javaの、PDFデジタル署名の検証を追加します

ドキュメントセットのコンテンツ保護方式では、ほかに、文書を暗号化透かしを追加するために、デジタル署名の使用は、セキュリティの有効な手段です。デジタル署名ファイルを確認することが容易で、高い権威と信頼性を持っています。Adobe PDF文書、デジタル署名を追加するか確認するための機能と直接法では、PDF文書に電子署名を追加し、署名を検証することにより、Javaプログラムをご紹介します次の資料は有効です。

使用ツール: Java用Spire.PDF

ジャーファイルとインポートの方法を取得します。

 

方法1 公式ウェブサイトを通じてジャーダウンロードするパッケージを。ダウンロード後は、JavaプログラムにSpire.Pdf.jarファイルの下のファイルとlibフォルダを解凍します。エフェクトを参照して本明細書で以下に紹介:(プログラム)は2つのJARファイルをモジュールに導入しました。



 

方法2 によってMavenの倉庫を導入取り付けられています。

 

Java コード例

 

[実施例1 ]にデジタル署名を追加するPDF

輸入com.spire.pdf *。; 
輸入com.spire.pdf.graphics.PdfImage。
輸入com.spire.pdf.graphics.PdfTrueTypeFont。
輸入com.spire.pdf.security.GraphicMode。
輸入com.spire.pdf.security.PdfCertificate。
輸入com.spire.pdf.security.PdfCertificationFlags。
輸入com.spire.pdf.security.PdfSignature。

インポート持つjava.awt。*; 
輸入java.awt.geom.Point2D。
輸入java.awt.geom.Rectangle2D; 

パブリッククラスAddCertificate { 
    パブリック静的無効メイン(文字列[] args){ 
        //加载PDF文档
        PdfDocument DOC =新しいPdfDocument()。
        doc.loadFromFile( "test.pdfという"); 

        //加载PFX证书、及证书秘钥
        PdfCertificate CERT =新PdfCertificate( "Cermia.pfx"、 "123654yes!");
 
        //特定のページにデジタル署名を追加し、その位置とサイズを設定
        PdfSignature署名=新しいPdfSignature(DOC、 (2取得doc.getPagesを()。 )、CERT、 "MySignature"); 
        たRectangle2D新しい新しいRectangle2D.FloatザRECT =(); 
        rect.setFrame(Point2D.Float新しい新しい((フロート).. doc.getPages()GET(0).getActualSize()のgetWidth() - 340、(フロート)doc.getPages()GET(0).getActualSize()のgetHeight() - 230)、(280、150))新次元新; .. 
        signature.setBounds(RECT); 

        //設定されたピクチャと署名テキストモード
        signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail); 

        //設定されたコンテンツの署名
        signature.setNameLabel( "署名:"); 
        signature.setName( "ミア");
        signature.setContactInfoLabel( "電話番号:"); "ArialのユニコードMS"、Font.PLAINを9))); 
        //セットされた原稿の権限は変更を禁止します 
        signature.setContactInfo( "02881705109")。
        signature.setDateLabel( "日期:"); 
        signature.setDate(新しいjava.util.Date()); 
        signature.setLocationInfoLabel( "地点:"); 
        signature.setLocationInfo( "成都"); 
        signature.setReasonLabel( "原因:"); 
        signature.setReason( "文档所有者"); 
        signature.setDistinguishedNameLabel( "DN:"); 
        signature.setDistinguishedName(signature.getCertificate()get_IssuerName()のgetName()); 
        signature.setSignImageSource(PdfImage.fromFile( "sign.png")); 

        //设置签名的字体
        signature.setSignDetailsFont(新しいPdfTrueTypeFont(新しいフォント( "ArialのユニコードMS"、Font.PLAIN、9)))。

        署名。
        signature.setCertificated(真の); 

        //保存文档
        doc.saveToFile( "AddSignature.pdf"); 
        doc.close(); 
    } 
}

 デジタル署名の効果を追加します。


 

[実施例2 ]デジタル署名の正当性を検証します

import com.spire.pdf.*;
import com.spire.pdf.security.PdfSignature;
import com.spire.pdf.widget.PdfFormFieldWidgetCollection;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;

import javax.swing.*;

public class ValidateSignature {
    public static void main(String[]args){
        //创建PdfDocument实例
        PdfDocument doc = new PdfDocument();
        //加载含有签名的PDF文件
        doc.loadFromFile("SignnedFile.pdf");

        //获取域集合
        PdfFormWidget pdfFormWidget = (PdfFormWidget) doc.getForm();
        PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.getFieldsWidget();

        //遍历域
        for (int i = 0; i < pdfFormFieldWidgetCollection.getCount(); i++) {
            //判定是否为签名域
            if (pdfFormFieldWidgetCollection.get(i) instanceof PdfSignatureFieldWidget) {
                //获取签名域
                PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget) pdfFormFieldWidgetCollection.get(i);
                //获取签名
                PdfSignature signature = signatureFieldWidget.getSignature();

                //判定签名是否有效
                boolean result = signature.verifySignature();
                if (result) {
                    String str1 =" 有效签名";
                    JOptionPane.showMessageDialog(null,str1);
                } else {
                    String str2 =" 无效签名";
                    JOptionPane.showMessageDialog(null,str2);
                }
            }
        }

    }
}

 

验证结果:


 

 

 

(本文完)

 

 

おすすめ

転載: miaonly.iteye.com/blog/2443093