2016-07-05 193 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使用彈性城堡來執行哈希,加密和簽名。