在Java中伪装图像文件

在Java中伪装图像文件,java,javax.imageio,Java,Javax.imageio,我有一个情况,我想做一些非常轻的图像文件混淆。我的应用程序附带了一堆.png文件,如果它们不那么容易编辑的话,我会喜欢它 我不是在寻找一个“安全”的解决方案,我不相信真的存在,我只是希望Joe Public无法编辑文件 我目前正在使用 ImageIO.read(new File("/images/imagefile.png")); 我不想使用序列化,因为ImageIO系统在代码中根深蒂固,每个图像也需要作为自己的文件保存在磁盘上 我希望我能改变文件扩展名 ImageIO.read(new Fi

我有一个情况,我想做一些非常轻的图像文件混淆。我的应用程序附带了一堆.png文件,如果它们不那么容易编辑的话,我会喜欢它

我不是在寻找一个“安全”的解决方案,我不相信真的存在,我只是希望Joe Public无法编辑文件

我目前正在使用

ImageIO.read(new File("/images/imagefile.png"));
我不想使用序列化,因为ImageIO系统在代码中根深蒂固,每个图像也需要作为自己的文件保存在磁盘上

我希望我能改变文件扩展名

ImageIO.read(new File("/images/imagefile.dat"));

但是ImageIO似乎用它来识别文件。我可以告诉ImageIO它是一个PNG,尽管它有扩展名吗?

加密磁盘上的所有文件。
然后在程序中,解密一个文件,将其加载到内存中,然后开始运行

加密磁盘上的所有文件。
然后在程序中,解密一个文件,将其加载到内存中,然后开始运行

…或将所有图像保存在单个文件中,并在加载时查找每个图像的起始位置。您可以通过对FileInputStream进行预搜索,或者反过来,通过为ImageIO.readInputStream创建ByteArrayInputStream来实现此目的。

…或者将所有图像保留在单个文件中,并在加载时搜索到每个图像的起始位置。您可以通过对FileInputStream进行预搜索,或者反过来,通过为ImageIO.readInputStream创建ByteArrayInputStream来实现此目的。

您可以尝试以下方法:

Iterator rs = ImageIO.getImageReadersByFormatName("png");
ImageReader ir = (ImageReader) rs.next();
File srcFile = new File("/images/imagefile.dat");
ImageInputStream iis = ImageIO.createImageInputStream(srcFile);
ir.setInput(iis);
你可以试试这个:

Iterator rs = ImageIO.getImageReadersByFormatName("png");
ImageReader ir = (ImageReader) rs.next();
File srcFile = new File("/images/imagefile.dat");
ImageInputStream iis = ImageIO.createImageInputStream(srcFile);
ir.setInput(iis);
Java映像I/O使用支持新映像格式1。我相信有可能使用文件扩展名添加一个新的解码器。如果是这样的话,就可以为自定义图像格式提供一个易于插入的读取器

请注意,您可能需要更改源中的文件扩展名。这可能是高级IDE的工作,也可能是使用grep进行一次性搜索和替换

至于格式,一个非常简单的方法是将图像的字节以相反的顺序写入,使媒体文件在普通阅读器中无法读取。然后在读取后将它们翻转回去,将它们放入ByteArrayInputStream中,并将它们传递给ImageIO.readInputStream

在您编写了服务提供者并使用带有属性的清单(manifest)正确地将其Jar化,以标识其处理的文件/内容类型以及相应的编码器/解码器之后,将其添加到应用程序的运行时类路径中,并且它应该能够读取自定义图像格式。 Java映像I/O使用支持新映像格式1。我相信有可能使用文件扩展名添加一个新的解码器。如果是这样的话,就可以为自定义图像格式提供一个易于插入的读取器

请注意,您可能需要更改源中的文件扩展名。这可能是高级IDE的工作,也可能是使用grep进行一次性搜索和替换

至于格式,一个非常简单的方法是将图像的字节以相反的顺序写入,使媒体文件在普通阅读器中无法读取。然后在读取后将它们翻转回去,将它们放入ByteArrayInputStream中,并将它们传递给ImageIO.readInputStream

在您编写了服务提供者并使用带有属性的清单(manifest)正确地将其Jar化,以标识其处理的文件/内容类型以及相应的编码器/解码器之后,将其添加到应用程序的运行时类路径中,并且它应该能够读取自定义图像格式。
这当然吸引了我内心的加密书呆子。我想分组密码会有点杀伤力。一些愚蠢的事情,比如翻转文件中的所有位就可以了…文件XOR 0xffyes,但现在你公开说了,你不能再这样做了:这当然吸引了我内心的加密高手。我想分组密码会有点杀伤力。一些愚蠢的事情,比如翻转文件中的所有位就可以了…文件XOR 0xffyes,但是现在你已经公开说了,你不能再这样做了:+1因为使用了模糊化这个词+1用于使用单词混淆;应用程序会自动在线更新,系统希望每个图像文件都是独立的,因为它一次只需要更改一个文件。明白了,然后文件级模糊处理就是:应用程序会自动在线更新,该系统希望每个图像文件都是独立的,因为它一次只需要更改一个文件。明白了,那么文件级的模糊处理就是:我认为你可能忘记了比我知道的更多的答案:我认为你可能忘记了比我知道的更多的答案: