可靠地验证文件有效JPG

时间:2018-09-22 04:46:32

标签: validation jpeg

我已经制作了一个脚本,可以使用JPEG幻数从任何文件中提取JPG(数据以FFD8开头,以FFD9结尾)。

但是这还不够,因为许多带有JPEG幻数的数据段不是实际的JPEG,只是其他随机数据,如果尝试将其打开为JPEG,则会引发错误。

可以执行哪些其他字节检查来验证JPEG文件的有效性(每个jpeg中都会存在标记)。

2 个答案:

答案 0 :(得分:1)

答案取决于您要执行的检查级别。每个JPEG流的开头应有一个SOI标记,结尾应有一个EOI标记。从理论上讲,EOI市场之后的数据可能会超出JPEG图像。

下一层,您可以检查是否有SOFx标记。应该只有一个。

然后,您可以确保有足够的SOS标记。在连续的JPEG中,每个组件上都应该有一个。对于渐进式JPEG,您需要做很多检查。

然后,您可以检查SOS标记所需的所有DHT和DQT标记是否存在。

最后,您可以检查扫描数据,这需要解压缩图像。

答案 1 :(得分:0)

我发现一个非常可靠的检查是找到帧开始字节标记(完整表here)。 ff c0ff c2

从那里收集字节,直到标头结束(以定义的开头)ff c4ff dbff dd

现在您有了框架标题。前两个字节告诉您标题的长度。确认收集的字节数与前两个字节的值匹配。标头长度通常为16。

如果ff c0 || ff c2ff c4 || ff db || ff dd之间的长度与前两个字节的值不匹配,或者没有找到这样的字节序列,则它不是有效的JPEG。