6

I want to distribute a few images and not allow others to see them unless they are using my program. My intention will be to use JPG files in which I will alter the header so other image viewers cannot read them anymore. For example I can delete the bytes 7-10 which are the magic signature for JPG. Later, my program will reconstruct the header and show the JPG file.

Question: how do I do this on the fly, without reading the “broken” JPG file, restoring the header, saving the good file to disk and then re-loading it as a “good” JPG file?

4

6 回答 6

16

将“损坏的”文件加载到TMemoryStream中,修补内存中的字节,然后使用TGraphic.LoadFromStream()加载固定的 JPG 文件。

于 2009-04-10T19:24:46.667 回答
6

加密它们。加载加密图像,在内存中解密,然后像 mghie 建议的那样执行 loadfromstream。

于 2009-04-10T21:16:54.960 回答
4

为什么不使用私钥加密图像并将您的公钥分发给您想要查看图像的人?分发公钥比编写一些自定义软件并分发它要容易得多。不要忘记;屏幕上显示的任何内容都可以被屏幕捕获。自定义损坏的 JPEG 只能与您的应用一起显示这一事实是没有保护作用的。也不要忘记;人们可以简单地使用损坏的图像分发您的软件。

于 2009-04-10T22:15:06.380 回答
2

Mghie 的答案与您发现的一样好,但不太可能太有效。如果有人想查看您的图像并且他们对图像格式一无所知,他们会在十六进制编辑器中打开它,并且很可能会识别出他们看到的内容是去掉了魔术头的 JPEG。

如果您真的想阻止别人查看您的图像,请构建您自己的图像格式(实际上并不像听起来那么难)并尽可能少地放入元数据,然后希望它有效。或加密它们,或将它们放入存档中(构建您自己的存档格式以获得最佳效果)并希望有效。

归根结底,任何被编码的东西都必须在显示之前被解码,任何有足够才华的黑客都可以通过你的解码程序追踪他们的方式并弄清楚它是如何工作的。你为什么要对你的用户隐藏一些东西?

于 2009-04-10T20:05:42.840 回答
1

您可以通过将图像字节打包为加密资源来使它们变得更加困难。但就像其他任何事情一样,如果他们可以访问可以获取图像的文件。这仅取决于愿意使用多少努力。

于 2009-04-10T20:12:02.230 回答
0

根据您需要它的安全程度,您可以做一些简单的事情,例如将文件扩展名混淆为仅由您的应用程序打开的扩展名。这仅在您更改的不是超级秘密图像时才有效。

于 2009-04-12T18:28:49.700 回答