关于可见的数字签名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于可见的数字签名相关的知识,希望对你有一定的参考价值。

给定一个带有可见数字签名的输入pdf文件,我想获得一个新的pdf文件,该文件将签名的可视化表示保留为图形对象,但不再作为签名字段。

我用一个工具(参见输入和输出文件)完成了这个,但我想知道如何使用iText。

输入:input.pdf

输出:output.pdf

答案

请注意,可以验证签名是否完好(使用来自作为CDS或AATL成员的CA的证书),以便您可以测试(1)“完整性”,(2)“身份验证”,以及(3)“不可抵赖性”。通过丢弃签名字段,您将丢失所有信息,并且在签名(1)之后没有人能够知道文档是否被更改,也没有人签署文档(2)。签名者总是声称他从未签署该文件(3),因为任何人都可以创建他的签名的视觉表示。

通过删除签名,您将创建一个没有实际签名的副本,类似于您打印经过数字签名的文档时所拥有的副本。您将通过删除实际的数字签名丢弃重要信息,仅保留视觉外观。

话虽这么说,你要求的东西非常简单:你想要压扁PDF文件。这在FlattenSignature示例中显示。检查文件output_no_longer_signed.pdf,你会发现它看起来与你的output.pdf完全一样。

实现这一目标的代码非常简单:

public void manipulatePdf(String src, String dest)
    throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.setFormFlattening(true);
    stamper.close();
}
另一答案

对我来说布鲁诺的回答没有用。我需要打电话给setGenerateAppearances(true)才能看到扁平的签名

public void flatPdf(String src, String dest) throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    AcroFields fields = stamper.getAcroFields();
    fields.setGenerateAppearances(true);
    stamper.setFormFlattening(true);
    stamper.close();
}

用:iText 5.5.13

以上是关于关于可见的数字签名的主要内容,如果未能解决你的问题,请参考以下文章

如何从活动中更改片段中视图的可见性

如何正确地将多个片段添加到片段过渡?

关于可见的数字签名

方向更改时不可见的片段

重新创建活动后片段不可见

片段管理访问错误可见 return false