2013-10-07 92 views
0

我要加密類型EnteredDetails的ArrayList(的Java bean),並將其序列化到file.I我下面這個鏈接,AES-128位加密:http://www.code2learn.com/2011/06/encryption-and-decryption-of-data-using.html鑑於最終塊未正確填充

使用的方法aes類的加密必須將arrarylist轉換爲字節數組,使用方法encrypt將其加密並使用fileoutputstream將其寫入文件。

現在在反序列化方法中,我使用fileinputstream讀取加密的字節數組,使用解密方法解密字節數組,並使用objectinputstream從解密的字節數組中取回我的數組列表。

這是我的Serialize方法:

public void serialize() { 
    try { 
     ByteArrayOutputStream b = new ByteArrayOutputStream(); 
     ObjectOutputStream o = new ObjectOutputStream(b); 
     o.writeObject(ar5.userDetails); 
     AES_Encryption en = new AES_Encryption(); 
     byte[] data=en.encrypt(b.toByteArray()); 
     FileOutputStream fos = new FileOutputStream("user.txt"); 
     fos.write(data); 
     b.close(); 
     fos.close(); 
     o.close(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 

編輯Deserialize方法:

 ArrayList<EnteredDetails> load() { 
    try { 
     File file=new File("user.txt"); 
     FileInputStream fis = new FileInputStream("user.txt"); 
     //   System.out.println("after fisssssss"); 
     //   ObjectInputStream ois = new ObjectInputStream(fis); 
     //   byte [] d =(byte []) ois.readObject(); 
     byte fileContent[] = new byte[(int)file.length()]; 
     AES_Encryption enc = new AES_Encryption(); 
     byte[] data = enc.decrypt(fileContent); 
     ByteArrayInputStream b = new ByteArrayInputStream(data); 
     ObjectInputStream ois2 = new ObjectInputStream(b); 
     ArrayList<EnteredDetails> al = (ArrayList<EnteredDetails>) ois2.readObject(); 
     fis.close(); 
     b.close(); 
     ois2.close(); 
     return al; 
    } catch (Exception e) { 
     System.out.println("exception in method load deseialize class " +     e.getMessage()); 
     return null; 
    } 
} 

錯誤:由於最後一個塊未正確填充

回答

0

你必須以相反的順序來應用過濾器。

在讀取對象流之前,您必須解密加密的數據。

+0

我編輯了desrialize方法,但現在它給出了錯誤 鑑於最終塊沒有正確填充 – sugam

+0

你應該關閉你的流,當你完成它們。 –

+0

我已經關閉它們,但錯誤仍然存​​在。 – sugam

相關問題