gpt4 book ai didi

java - 读取隐藏的 zip 文件

转载 作者:行者123 更新时间:2023-11-30 08:55:00 24 4
gpt4 key购买 nike

我有一个 jpeg,在它的末尾我写了一个 zip 文件。

此 zip 文件中有一个名为 hidden.txt 的 txt 文件。我可以将扩展名更改为 zip 并在我的笔记本电脑 (debian) 上读取文件就好了,但是当我尝试使用 ZipInputStream 或使用 ZipFile 读取它时,我得到一个错误提示我这不是 zip 文件。

我尝试通过将整个内容读取到 Bitmap 然后将其写入 byte[] 来分离 jpg 部分,但是 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();
}

所以我真的有两个问题,

  1. 如何分离文件的 jpg 和 zip 部分?
  2. 如何解压 hidden.txt(最好解压到 byte[] 中)
    • 我很确定我知道这个,但我目前正在做的事情不起作用,可能是因为我做错了#1

最佳答案

好的,下面是我将如何做到这一点。虽然它非常 hacky。

问题是很难分辨图像数据和 zip 数据之间边界的索引。假设您可以在图像数据之后写入任意数据并且仍然有一个工作图像文件,您可以尝试以下方法:

  1. 写出图像数据。
  2. 写出一个神奇的字符串,例如“BEGIN_ZIP”
  3. 写出 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.

关于java - 读取隐藏的 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245570/

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