2017-01-10 36 views
0

我想寫使用CipherOutputStream加密的文件,CipherOutputStream創建0字節的文件

PFB的代碼序列化

public class SerializeDemo implements Serializable{ 
    private static final long serialVersionUID = -7128734972070518012L; 

    private static SerializeDemo INSTANCE = null; 

    private ArrayList <SerializeItem> item; 
    public static void serialize() { 
     INSTANCE = new SerializeDemo(); 

     ArrayList <SerializeItem> list = new ArrayList <SerializeItem>(); 

     SerializeItem item = new SerializeItem(); 

     item.setV1("DD"); 
     item.setV2("D"); 
     list.add(item); 

     INSTANCE.setItem(list); 
     try { 
      Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
      c.init(Cipher.ENCRYPT_MODE, getKeyPair().getPublic()); 

      CipherOutputStream cos = new CipherOutputStream(new FileOutputStream("D:\\abc"), c); 
      ObjectOutputStream os = new ObjectOutputStream(cos); 
      os.writeObject(INSTANCE); 
      os.flush(); 
      os.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      } 

     System.out.println("Serialized"); 
    } 
} 

PFB我SerializeItem類定義

public class SerializeItem implements Serializable{ 
    private static final long serialVersionUID = 850426811900126363L; 

    private String V1 = null; 

    private String V2 = null; 

//getter setters for the bean file 
} 

如果我添加此類序列化中有2個以上的字符串成員變量停止,並且我得到一個0字節的文件。請建議

+1

即使沒有寫入對象,甚至沒有'CipherOutputStream',除非出現異常,否則無法使用此代碼獲取零長度文件。它以前如何?注意靜態'INSTANCE'的點離開了我。 – EJP

+0

運行代碼時沒有錯誤,如果我只給出2個字段,那麼我會得到一個非零長度的文件。靜態實例用於實現單例模式 –

+0

您發佈的代碼中只有兩個字段。我們是否理解沒有發佈非工作版本? – EJP

回答

1

RSA不是分組密碼,並且不會像預期的那樣使用CipherOutputStreamCipherOutputStream上的close方法掩蓋了IllegalBlockSizeException,這是因爲您的數據比塊大小(密鑰大小/ 8填充)長而引發的。

如果您在結束前致電c.doFinal(),您將會看到異常情況。