使用java在pdf中加密嵌入式附件

时间:2014-05-21 13:09:25

标签: java itext x509certificate digital-signature bouncycastle

我们需要使用java将文件嵌入到pdf中,我们需要将其与证书一起加密 几个月前我发现了一些使用(如果我没有注意)的东西,但我再也找不到它了 证书在智能卡上

1 个答案:

答案 0 :(得分:0)

使用公共证书加密PDF。加密PDF后,只有具有相应私有证书的人才能打开PDF。在您的方案中,这意味着只有拥有智能卡的人才能打开文档。

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

获得此证书后,您可以像这样加密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.cer中。这是最终用户从智能卡中提取的文件。

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

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