PDF加密/解密无法正常工作

时间:2016-07-05 13:52:20

标签: java security pdf bouncycastle encryption-asymmetric

当我尝试使用bouncycastle加密/解密pdf文件时,这给我一个空的pdf(大小为184Ko)。 代码与文本文件完美配合。但没有办法用PDF文件。 任何人都知道如何用Java加密/解密PDF文件?

下面我用于加密的代码, 当我在此行中加密PDF文件(java.lang.ArrayIndexOutOfBoundsException:RSA块的数据太多)时出现异常cipherText = cipher.doFinal(input):

     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文件时,它可以工作......

2 个答案:

答案 0 :(得分:1)

以下是您需要决定的内容:我想要加密文件还是要加密PDF?区别很重要。如果你想要一个加密文件,那就是你。您遇到问题的可能原因可能包括PDF通常是二进制文件,虽然这不应该对弹性城堡产生影响,但它可能会告知您用于数据的阅读器类型,例如。

如果您正在尝试获取加密的PDF(我怀疑这是您真正想要的),充气城堡将不会(直接)为您执行此操作。

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

引擎盖下,iText和JoltPdf使用充气城堡进行散列,加密和签名。

答案 1 :(得分:0)

我可以告诉你理论,这里是:

前段时间我加密了一张图片,我是通过将图片读入2048个巨大的字节数组来实现的。之后我将它每2048个字节拆分成一个单字节文件(这是一张小图片),之后我就有20个不同名字的文件,这很简单但加密也很好

第二种方法是使用Caesar Encryption(类似的东西),这意味着你向上或向下移动每个字节2个位置(或超过2个)

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