使用cipherInputStream和FileInputStream一起进行未加密和加密访问

时间:2015-06-22 20:23:10

标签: java

我的文件包含开头包含未加密的标头数据,然后其余部分包含加密的标头数据。 我希望能够使用BufferedInputStream / FileInputSteam读取头数据。 接下来我想使用CipherInputStream开始读取其余的加密数据,CipherInputStream使用相同的BuffereredInputStream作为输入

这是允许的吗???是否可以改变使用流的方式。

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做。

唯一棘手的部分取决于标题的结构。如果您必须读取标题的末尾以确定其结束位置,则需要能够在流中备份一些位,以便CipherInputStream可以读取所有加密数据。另一方面,如果您的标题具有固定长度,或者它的长度编码,或者它具有某种结束标记,那么它应该非常简单:

try (InputStream is = new BufferedInputStream(Files.newInputStream(...))) {
  Header header = Header.read(is);
  CipherInputStream cis = new CipherInputstream(is, header.getCipherInstance());
  cis.read(...);
}