2017-01-19 8 views
1

iTextSharp Dllを使用してデジタル署名を実装して、単一の署名でPDFファイルに署名しました。今、私は以前にデジタル署名されたPDFにもう1つのデジタル署名を追加したいのですが、1つの署名を検証する際にエラーが発生します。CでiTextSharpを使用して複数のデジタル署名を追加する

複数のデジタル署名を1つのPDFに追加してすべての署名を検証する方法を教えてください。

PdfReader reader = new PdfReader(fileName); 
using (FileStream fout = new FileStream(SignedFileName, FileMode.Create, FileAccess.ReadWrite)) 
{ 
    // appearance 
    PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0'); 
    PdfSignatureAppearance appearance = stamper.SignatureAppearance; 
    //appearance.Reason = SignReason; 
    //appearance.Location = SignLocation; 
    appearance.SignDate = DateTime.Now.Date; 
    appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(xPos, yPos, xPos + 200, yPos + 100), PageNo, null);//.IsInvisible 

    // Custom text and background image 
    appearance.Image = iTextSharp.text.Image.GetInstance(SignatureImg); 
    appearance.ImageScale = 0.6f; 
    appearance.Image.Alignment = 300; 
    appearance.Acro6Layers = true; 

    StringBuilder buf = new StringBuilder(); 
    buf.Append("Digitally Signed by "); 
    String name = SignerName; 

    buf.Append(name).Append('\n'); 
    buf.Append("Date: ").Append(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss zzz")); 

    string text = buf.ToString(); 

    appearance.Layer2Text = text; 

    //digital signature 
    IExternalSignature es = new PrivateKeySignature(pk, "SHA-256"); 
    MakeSignature.SignDetached(appearance, es, new Org.BouncyCastle.X509.X509Certificate[] { pk12.GetCertificate(alias).Certificate }, null, null, null, 0, CryptoStandard.CMS); 

    stamper.Close(); 

} 
+0

さまざまなパラメータを使用して初期署名に使用できるコードサンプルを実行しようとしましたか?フィールドの新しい名前のように、新しい境界ボックス。 –

+1

あなたのコードを教えてください!最初の署名で追加のデジタル署名が可能ですか? (余分な署名を追加すると、 "no changes allowed"レベルの作成者署名が壊れます!)追加モードで2番目の署名を追加しましたか? (元のPDFのバイトを変更した場合、最初の署名が破損します。)あなたの質問は不完全であり、したがってダウン投票です。最初に[ドキュメント](http://pages.itextpdf.com/ebook-digital-signatures-for-pdf.html)を読んでから、何かがまだ不明な場合は、質問を修正してください。 –

+0

* "以前に署名された*と*既に署名された* *によって異なることを意味しますか?はいの場合は、@ Brunoの説明に従って質問を改善するときの違いを説明してください。 – mkl

答えて

1

エラーは、この行である:

PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0'); 

変更し、それに:

PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0', true); 

説明:あなたはありません

私は、次のコードを使用しています追加モードで文書に署名します。

コードをさらに調べると、画像も追加されています。それは難しいことがあります。追加モードで新しいシグネチャを追加すると、1つの問題が解決されます。その余分なコンテンツを追加すると、使用しているiTextのバージョンによっては余分な問題が発生する可能性があります。

+0

私は、PdfStamper stamper = PdfStamper.CreateSignature(リーダー、fout、 '\ 0'、null、true)を追加しました。私のコードでそれは正常に署名が確認されています。それは私が署名のために追加したイメージを逃しました...お勧めします。 – Xplora

+0

イメージを追加しなかった場合、イメージは追加されません。私はこのような不完全な質問にあなたがどのような反応を期待しているのかは分かりません。 –

関連する問題