gpt4 book ai didi

java - CipherOutputStream 创建 0 字节文件

转载 作者:行者123 更新时间:2023-12-01 09:02:29 25 4
gpt4 key购买 nike

我正在尝试使用 CipherOutputStream 写入加密文件,

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 个 String 成员变量,序列化就会停止,并且我会得到一个 0 字节文件。请大家推荐一下

最佳答案

RSA 不是分组密码,并且不会像您期望的那样使用 CipherOutputStream 工作。 CipherOutputStream 上的 close 方法会屏蔽 IllegalBlockSizeException,该异常是由于数据长于 block 大小( key 大小/8 - 填充)而引发的。

如果在关闭之前调用 c.doFinal(),您将看到异常。

关于java - CipherOutputStream 创建 0 字节文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41564867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com