需要帮助识别奇怪的图像序列化格式

Need help in recognizing strange image serialization format

我想我遇到了一个无法用谷歌搜索的问题,所以我绝望地求助于你。

我打算从一个旧的自己编写的知识数据库(在PHP,公司内部编写)中恢复图像。这些图像在一段时间之前不再需要,并且每个用于加载它们的具体实现都已被删除,因为它已经过时了;只剩下文件了,现在我负责将它们带回来检查是否还有我们仍然需要的东西。

写那个构造的地下室的人早已不在了,所以我没有人可以问...

图片以文件的形式存储在服务器的硬盘上(不是数据库),而不是简单的图片!它们以某种方式被加密,我无法解析它们的加密方式……但也许这不是必需的……

我构建了某种沙箱来确定图片加载器 class 的方法如何工作和反应,以及它们通过分析我发现的助手 classes 给我带来了什么。

所以我想到了这个:

$ih = new DrImageHelper();
$ih->setImgStore('/home/mic/copy/encrypted_imgs/'); // this dir contains the stange encrypted image files
$imgs = $ih->getImages(DrImageHelper::TYPE_DIAGRAM, 90);

$img_code = DrImageHelper::getImageCode($imgs[0]);

print_r($img_code);

(我不希望你告诉我 code/usage 是否正确,我猜没有人能告诉我,因为它是公司自己编写的 class 结构)

这 returns 类似于:

/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA2AAD/4QMZaHR0cDovL25zLmFkb2JlLmNvbS94YXA

(这只是一小部分)

我不太确定这应该是什么以及如何处理它,但似乎这是 only/perhaps 正确的顺序我可以使用 class 方法来获得结果.. 我花了几个小时来组合方法调用但没有成功.. 上面是唯一没有致命崩溃的片段和 returns 结果...

getImageCode方法的注释说明: "Returns the decrypted base encoded String to be printed"

有人能想象这意味着什么吗?

有人知道这种格式或如何从中打印 it/regain 图像吗?

真的可以输出这么长的文字串吗?

我曾经在做类似的事情...

所以就像评论中已经说过的那样,我也认为这只是一个基本(32 或 64)编码的字符串(也根据您在该方法中找到的评论)。所以基本上,如果是这样,你甚至不需要费心去想它是二进制文件还是幕后的任何东西......

因为猜测没有多大意义,我建议只尝试使用以下代码部分:

$img_string = base64_decode($img_code); // use the var that contains the image code returned by DrImageHelper::getImageCode() here..
print_r($img_string);

如果您看到某些东西,这可能表明您正在使用典型图片 header(包含 "PNG" 或 "JPG" 和一些 plain-text 描述或其他内容)正确的方法,可以尝试使用以下方法简单地从该字符串创建图像:

$im = imagecreatefromstring($img_code);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

(这与上面截取的代码无关,应该单独放到另一个脚本中)

备注:为此目的,您需要一个仅包含上面第二个片段的脚本,因为有一行将 header 类型设置为发送...

现在在浏览器中打开该脚本(由 apache/php 提供)...如果一切正常,您现在应该可以看到您的图片,而不会再有奇怪的代码。

要在您的网页中使用此解密图片,您可以将 php 脚本加载为图像。这是有效的,因为脚本告诉它属于哪种 mime 类型。因此,假设上面的第二个片段被复制到名为 "picture_decrypter.php" 的脚本中,请执行以下操作:

<img src="picture_decrypter.php" alt="" />