我有一个jpeg,最后我写了一个zip文件。
此zip文件中包含一个名为hidden.txt
的txt文件。我可以将扩展名更改为zip并在我的笔记本电脑上正常读取文件(debian)但是当我尝试使用ZipInputStream
或使用ZipFile
阅读时我收到错误告诉我它#39 ; s不是zip文件。
我首先尝试将jpg部分分开,将整个内容读取到Bitmap
,然后将其写入byte[]
,但byte[]
不仅包含图像。
我的方法是结合位图和zipFile(byte[]
)
private byte[] combineFiles(Bitmap drawn, byte[] zip) throws
IOException {
InputStream in;
ByteArrayOutputStream out = new ByteArrayOutputStream();
/*write the first file*/
byte[] img;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
drawn.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
img = byteArrayOutputStream.toByteArray();
in = new ByteArrayInputStream(img);
IOUtils.copy(in, out);
in.close();
/*add the second (hidden) file*/
in = new ByteArrayInputStream(zip);
IOUtils.copy(in, out);
out.flush();
in.close();
return out.toByteArray();
}
所以我真的有两个问题,
hidden.txt
(最好是byte[]
)
答案 0 :(得分:1)
好的,好吧,我将如何做到这一点。虽然它非常hacky。
问题在于很难分辨图像数据和zip数据之间的边界索引。假设您可以在图像数据之后写入任意数据并且仍然有工作图像文件,那么您可以尝试以下方法:
现在,当您尝试阅读时:
byte[] data = readAllTheBytes();
int index = searchFor("BEGIN_ZIP", data) + "BEGIN_ZIP".length();
// now you know that the zip data begins at index and goes to the end of the byte array
// so just use a regular zipinputstream to read in the zip data.
答案 1 :(得分:1)
在JPEG文件中 0xFF,0xD8 字节序列表示图像的开始, 0xFF,0xD9 字节序列表示图像的结束JPEG Structure Wikipedia。因此,只需在文件中搜索后一个序列,您就可以分离图像和zip部分。然后使用ZipInputStream
从zip文件中读取(解压缩)数据。