在创建 docMDP 时,我在 openPDF 中偶然发现了以下代码:
private void addDocMDP(PdfDictionary crypto) {
PdfDictionary reference = new PdfDictionary();
PdfDictionary transformParams = new PdfDictionary();
transformParams.put(PdfName.P, new PdfNumber(certificationLevel));
transformParams.put(PdfName.V, new PdfName("1.2"));
transformParams.put(PdfName.TYPE, PdfName.TRANSFORMPARAMS);
reference.put(PdfName.TRANSFORMMETHOD, PdfName.DOCMDP);
reference.put(PdfName.TYPE, PdfName.SIGREF);
reference.put(PdfName.TRANSFORMPARAMS, transformParams);
reference.put(new PdfName("DigestValue"), new PdfString("aa"));
PdfArray loc = new PdfArray();
loc.add(new PdfNumber(0));
loc.add(new PdfNumber(0));
reference.put(new PdfName("DigestLocation"), loc);
reference.put(new PdfName("DigestMethod"), new PdfName("MD5"));
reference.put(PdfName.DATA, writer.reader.getTrailer().get(PdfName.ROOT));
PdfArray types = new PdfArray();
types.add(reference);
crypto.put(PdfName.REFERENCE, types);
}
这也将被放入 PDF:
/Reference[<</DigestLocation[0 0] /TransformMethod/DocMDP /Type/SigRef /DigestMethod/MD5
/DigestValue(aa) /TransformParams<</P 1/V/1.2/Type/TransformParams>>/Data 5 0 R>>]
我将 DigestMethod 更改为更新的方法,它确实有效。此外,'aa' 看起来非常静态,老实说就像一个虚拟实现。关于这些价值观的任何见解?为什么可以毫无后果地改变它们?我将它与它的前身 *text 5 进行了比较,但它在那里是一样的......