2016-07-05 147 views
0

当我尝试使用bouncycastle加密/解密PDF文件时,这给了我一个空的pdf(与184Ko大小)。该代码完美地与文本文件一起工作。但没有办法用PDF文件。 任何人都有一个想法如何在Java中加密/解密PDF文件?PDF加密/解密不工作

波纹管,我使用的加密代码, 我得到一个异常时,我加密PDF文件(java.lang.ArrayIndexOutOfBoundsException:用于RSA块太多数据)在这一行密文= cipher.doFinal(输入):

 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

    byte[] input = acVote; 
    byte[] cipherText = null; 

    Cipher cipher = null; 

    try { 
    cipher = Cipher.getInstance("RSA/ECB/OAEPPadding", "BC"); 

    SecureRandom random = new SecureRandom(); 

    //do encryption 

    cipher.init(Cipher.ENCRYPT_MODE, pubKey, random); 

    cipherText = cipher.doFinal(input); 
    } catch (Exception ex) { 
     log.error("Exeption Message : " + ex); 
    } 

当我加密一个.txt文件,它的工作原理...

+0

**(A)**您不显示任何代码。因此,我们不知道您尝试了什么。那么我们怎么能说出那个错误呢? **(B)**您谈论PDF加密。您的意思是使用PDF规范中提到的加密算法之一进行加密,因此您可以使用标准PDF查看器进行解密?或者你的意思是PDF不可知的加密? – mkl

+0

PDFencryption作为字符串加密... 正如我所说的这项工作的.txt文件,但不是.pdf文件... –

+0

PDFs不是字符串,不是字符数据,它们是二进制文件。因此,使用用于文本字符串的代码可能会导致PDF失败。 – mkl

回答

0

我可以告诉你的理论,那就是:

我前一段时间已加密的图片和我通过阅读图片成为2048年的巨大b yt数组。之后,我把它每2048字节分成一个字节文件(这是一个小图片),然后我有20个不同名称的文件,这是非常简单,但也是一个很好的加密

第二种方法是通过使用凯撒加密(类似的东西),这意味着你移动的每一个字节2处向上或向下(或2个以上)

这些都是我很容易,但有时有用的加密 :DDDDDDDDDDDDDDD

1

这里有您需要什么决定:我想要一个加密文件还是要加密PDF?区别很重要。如果你想要一个加密文件,那就在你身上。例如,您可能会遇到问题的原因可能包括:PDF通常是二进制的二进制文件,尽管这对弹性城堡没有任何影响,但它可能会告知您用于数据的阅读器的类型。

如果你想获得一个加密的PDF(我怀疑这是你真正想要的),充气城堡不会(直接)为你做。

取而代之,您需要使用基于iText的iText工具或其他类似的库(例如JoltPdf),它可以使用PDF并正确写入加密的PDF。加密的PDF是仅部分加密的PDF文件。字符串和流类型的PDF元素将使用提供的密码,指定的加密算法和一些盐进行加密。另外,根据加密算法,文档可能会得到签名,这是它自己的事情,不符合大多数典型的签名过程。

在引擎盖下,iText和JoltPdf使用弹性城堡来执行哈希,加密和签名。