使用itext 5.5.5的数字签名



我从iText5.2.1升级到iText5.5.5

我使用PdfStamper和PdfSignatureApperance来应用数字签名。

这是我的代码片段。

PdfStamper stamper = PdfStamper.createSignature(reader, byteArrayOutputStream,'');
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);

从上面的代码中,有一些东西在当前版本中没有出现。

1) 在iText的版本5.5.5中,我找不到PdfSignatureApperance类的"setCrypto"方法。

2) PdfSignatureApprance不包含WINCER_SIGNED。

如果有人能帮我用新的替代品应用数字签名。

谢谢。

事实上,自从iText 5.3以来,签名API发生了一些变化,setCrypto方法不再存在。我阅读了Bruno的白皮书,下面是适用于我的代码:

PdfReader reader = new PdfReader(new FileInputStream(file));
FileOutputStream fout = new FileOutputStream(new File(targetDir, fileName));
PdfStamper stp = PdfStamper.createSignature(reader, fout, '');
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setReason(reason);
sap.setLocation("Pleber-Christ");
ExternalDigest digest = new BouncyCastleDigest();
BouncyCastleProvider provider = new BouncyCastleProvider();
ExternalSignature signature = new PrivateKeySignature(key, DigestAlgorithms.SHA256, provider.getName());
MakeSignature.signDetached(sap, digest, signature, chain,   null, null, null, 0, CryptoStandard.CMS);

您必须将bcprov-jdk15on-1.60.jarbcpkix-jdk15on-1.60.jar放在类路径中。你可能需要稍微改变一下以适应你的需要。

最新更新