2017-01-10 38 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(),您将会看到异常情况。