java - 使用java加密pdf中的嵌入附件

标签 java itext x509certificate digital-signature bouncycastle

我们需要使用java将文件嵌入到pdf中,并且需要使用证书对其进行加密 几个月前我发现了一些使用(如果我没有磨损)itext 的东西,但我再也找不到它了 证书位于智能卡上

最佳答案

加密 PDF 是通过公共(public)证书完成的。一旦 PDF 被加密,只有拥有相应私有(private)证书的人才能打开 PDF。在您的场景中,这意味着只有拥有智能卡的人才能打开该文档。

首先您需要从智能卡中提取公共(public)证书。这里的主要问题是:你想用 Java 来做这个吗?如果是这样,您想使用 PKCS#11 来执行此操作吗?使用MSCAPI?使用智能卡 API?老实说,我不认为那是你想做的。我认为您希望智能卡的所有者手动提取其公共(public)证书并将其发送给您。如果这个假设是错误的,您需要发布另一个问题:如何从智能卡获取公共(public)证书。

获得此证书后,您可以像这样加密 PDF:

 PdfReader reader = new PdfReader(src);
 PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
 Certificate cert = getPublicCertificate("resources/encryption/public.cer");
 stamper.setEncryption(new Certificate[]{cert},
     new int[]{PdfWriter.ALLOW_PRINTING}, PdfWriter.ENCRYPTION_AES_128);
 stamper.close();
 reader.close();

公共(public)证书存储在文件public.cer中。这是您的最终用户从智能卡中提取的文件。

如果您想单独加密附件,则必须在这些文件级别执行此操作。不清楚您是在谈论 PDF 还是其他类型的文档。

我已复制粘贴the source code snippet from my book .

关于java - 使用java加密pdf中的嵌入附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23784155/

相关文章:

java - 在 Java 中针对 CA 验证 X.509 证书

java - 如何以用户格式显示 solr 日期

java - 你应该遮蔽你的依赖关系吗?

Java - PDF 生成框架

ssl - 使用服务器 key 签署客户端证书时出现无法加载证书错误

security - 如何保持公钥静态,但轮换证书

java - 找到重复的蓝牙设备。我在这里双重浸渍吗?还能够更新 recyclerview

java - Dozer 排除嵌套字段

java - 是什么让 PdfStamper 在 cleanup() 之后从 pdf 中删除图像,尽管它不应该?

c# - 无法加载文件或程序集 itextsharp