使用 Java 从图像中提取隐藏文件

Extracting hidden files out from an image using Java

我们可以通过以下方式在图片中隐藏rar/zip个文件。这个概念被称为隐写术。

假设我想在图像中隐藏一个 rar 文件,我将在 Windows 命令提示符

中编写此命令
copy /b image.jpg+as.zip hidden.jpg

现在要取回内容,我们可以使用 Winrar/7zip 或任何其他实用程序打开 hidden.jpg,它将显示其所有内容

现在要读取一个 zip 文件,我正在使用这个 java 代码

try{
            File file=new File(name);
            ZipFile zipFile=new ZipFile(file);
            Enumeration<? extends ZipEntry>enumeration=zipFile.entries();

            System.out.println("Listing Entries in the zipfile");
            while(enumeration.hasMoreElements()){
                Object key=enumeration.nextElement();
                System.out.println(key.toString()+":"+zipFile.getEntry(key.toString()));
            }

            zipFile.close();
        }catch(Exception e){
            System.out.println(e.toString());
        }

当我尝试使用此代码打开 "hidden.jpg" 文件时,此代码对普通 zip file/But 工作正常,但出现错误。我也用 Apache Common Compress Library 进行了同样的测试。谁能指出我如何在 Java 中做到这一点?

我相信这是可以做到的,因为我们可以使用 WinRar 等工具查看隐藏文件

这不是真正的隐写术,因为您没有在图像中隐藏任何内容。您只是在文件末尾添加数据,如果以任何方式编辑图像,附加数据将丢失。

一些(不是全部)存档器可以找到 "hidden" 数据的唯一原因是他们在整个文件中搜索可能的存档。正常的库例程不会。他们希望存档从头开始。

所以要想打开存档,就得找到起始位置。这可以通过打开图像文件并确定其大小,或者自己搜索存档的开头来实现。

但正如我所说,这不是隐写术,图像中没有隐藏任何内容。

还有,速记是写快手,速记是把数据藏在另一个里面。