我知道如果我要创建和写入zip文件,我需要将ZipOutputStream包装在一个OutputStream(或其子类)中,如下所示:
我知道通常要加密(或解密),我需要像这样包装一个流到另一个流中:
我也知道如何创建zip文件,并在添加新条目时需要指定并关闭该条目。我想做的是加密存档文件中的文件,但保留未加密的存档文件以便于查找条目。(部分原因是不同的条目将在不同的时间读取 - 如果我加密整个zip文件,那么每次读取它时都必须从开头开始,即使我需要的zip条目是第99个。如果整个文件都加密,我将无法随机访问条目。)fos = new FileOutputStream(fileName)
zOut = new ZipOutputStream(fos);
我知道通常要加密(或解密),我需要像这样包装一个流到另一个流中:
如果我要写入ZipOutputStream并希望加密条目,则可以创建ZipOutputStream时执行上述操作,就像在第一个示例中所做的那样,当需要为zip条目写入数据时,我将ZipOutputStream包装在CipherOutputStream中,如下所示:fos = new FileOutputStream("ciphertext");
CipherOutputStream cos = new CipherOutputStream(fos, key);
但这引出了一些问题:fos = new FileOutputStream(fileName)
zOut = new ZipOutputStream(fos);
...
CipherOutputStream cos = new CipherOutputStream(zOut, key);
- 像这样的东西,通常流的顺序是否重要?如果我将CipherOutputStream包装在ZipOutputStream中,或者反过来,会有影响吗?换句话说,如果整个文件都加密,那么包装在哪个流周围会有影响吗?
- 如果按照上述方法,在每个条目的数据中使用CipherOutputStream,当我需要关闭该条目并转到下一个时,我该怎么办?我可以销毁CipherOutputStream而不影响它所包装的流吗?
- 是否有更好的方法仅加密zip条目而不加密zip文件中的目录和其他数据?