当我尝试使用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文件时,它可以工作......
答案 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