gpt4 book ai didi

java - 在 Java 中对 PDF 进行数字签名和时间戳

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:37 24 4
gpt4 key购买 nike

我想用 Java 将数字签名附加到 PDF 文件,然后使用受信任的时间戳机构为该文件添加时间戳。

我该怎么做?

最佳答案

将带有私钥的数字证书导出到 pfx 文件。

将 iText 与 BouncyCaSTLe 结合使用:

Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph("Hello World!"));
document.close();


PdfReader reader = new PdfReader(baos.toByteArray());
OutputStream os = new FileOutputStream("c:\\temp\\sign\\test.pdf");
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');

// Creating the appearance
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setReason("REASON");
appearance.setLocation("LOCATION");

appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");

Security.addProvider(new BouncyCastleProvider());

FileInputStream fis = new FileInputStream("c:\\ssl\\test.pfx");
String password = "myPassword";

KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(fis, password.toCharArray());
String alias = ks.aliases().nextElement();

PrivateKey pk = (PrivateKey) ks.getKey(alias, password.toCharArray());
X509Certificate cert = (X509Certificate) ks.getCertificate(alias);

TSAClient tsc = new TSAClientBouncyCastle("http://timestampserverURL/");
ExternalDigest digest = new BouncyCastleDigest();
ExternalSignature signature = new PrivateKeySignature(pk, "SHA-1", "BC");
MakeSignature.signDetached(appearance, digest, signature, new Certificate[] { cert }, null, null, tsc, 0,
CryptoStandard.CMS);

Maven 依赖项:

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.49</version>
</dependency>

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk15on</artifactId>
<version>1.49</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bctsp-jdk15on</artifactId>
<version>1.46</version>
</dependency>


<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>

关于java - 在 Java 中对 PDF 进行数字签名和时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com