hash签名 java,使用Java和iText对PDF哈希签名

I have an application that generates a PDF, and that needs to be signed.

We have not the certificates to sign the document, because they're in a HSM, and the only way we could make use of the certificates is using a webservice.

PdfReader reader = new PdfReader(src);

reader.setAppendable(true);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

FileOutputStream fout = new FileOutputStream(dest);

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

PdfSignatureAppearance appearance = stamper.getSignatureAppearance();

appearance.setReason("Test");

appearance.setLocation("footer");

appearance.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, null);

appearance.setCertificate(certChain[0]);

PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);

dic.setReason(appearance.getReason());

dic.setLocation(appearance.getLocation());

dic.setContact(appearance.getContact());

dic.setDate(new PdfDate(appearance.getSignDate()));

appearance.setCryptoDictionary(dic);

HashMap exc = new HashMap();

exc.put(PdfName.CONTENTS, new Integer(8192 * 2 + 2));

appearance.preClose(exc);

ExternalDigest externalDigest = new ExternalDigest()

{

public MessageDigest getMessageDigest(String hashAlgorithm) throws GeneralSecurityException

{

return DigestAlgorithms.getMessageDigest(hashAlgorithm, null);

}

};

PdfPKCS7 sgn = new PdfPKCS7(null, certChain, "SHA256", null, externalDigest, false);

InputStream data = appearance.getRangeStream();

byte[] hash = DigestAlgorithms.digest(data, externalDigest.getMessageDigest("SHA256"));

Calendar cal = Calendar.getInstance();

byte[] sh = sgn.getAuthenticatedAttributeBytes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值