使用itext 5.5.5的数字签名

时间:2015-02-26 22:23:05

标签: pdf itext

我从iText 5.2.1 升级到iText 5.5.5

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

这是我的代码片段。

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

从上面的代码中可以看出当前版本中没有的一些东西。

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

2)PdfSignatureApperance不包含WINCER_SIGNED。

如果有人可以帮我使用新的替代方案来应用数字签名。

感谢。

1 个答案:

答案 0 :(得分:0)

实际上,从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, '\0');

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.jar bcpkix-jdk15on-1.60.jar 放入您的类路径中。您可能需要对其进行一些更改以满足您的需求。