png/zip文件结构详解

用到的工具 010editor
可以大致看一下,了解一下各个文件类型的文件头,文件尾
之后如果有需要可以来查(收藏一下吧)
后面可能还会补充其他类型的文件

png

参考 Portable Network Graphics (PNG) Specification, version 1.2 可移植网络图形(PNG)规范,1.2版

文件结构

文件头(PNG file signature)

png开头八个字节总是为以下值(十六进制,两个十六进制数为一字节)
89 50 4E 47 0D 0A 1A 0A 对应解码数据:%PNG....(.为不可打印字符)

此签名表示文件的其余部分包含单个PNG图像,由一系列以IHDR块开始、以IEND块结束的块组成。

块布局(Chunk layout)

每个区块包含4个部分

长度(Length)

一个4字节的无符号整数,给出块数据字段中的字节数。长度只计算数据字段,而不计算其本身、块类型代码或CRC。零是有效的长度。尽管编码器和解码器应将长度视为无符号,但其值不得超过 2311 字节。

区块类型(Chunk Type)

4字节块类型代码。比如IHDR、IDAT、IEND等类型

区块数据(Chunk Data)

区块数据字节,长度可以为零

CRC循环冗余校验码(CRC)

对块中前面的字节计算的 4 字节 CRC(循环冗余校验),包括块类型代码和块数据字段,但不包括长度字段。 CRC 始终存在,即使对于不包含数据的块也是如此。

每个区块长度可以是任意字节数,最多可达最大字节数
块可以以任意类型出现,但受到块类型的限制,比如IHDR必须首先出现,IEND必须最后出现(因此IEND块充当文件结束标记。)

IHDR块


IHDR和其他块一样,有长度部分、类型部分即IHDR、数据部分以及CRC部分
它的数据部分(小写的ihdr)包含以下信息

  • 宽度:4字节
  • 高度:4字节
  • 位深度:1字节
  • 颜色类型:1字节
  • 压缩方式:1字节
  • 过滤方式:1字节
  • 交错方式:1字节

PLTE块

PLTE块包含 1 到 256 个调色板条目,每个调色板条目都是以下形式的三字节系列:

  • 红色:1 字节(0 = 黑色,255 = 红色)
  • 绿色:1 字节(0 = 黑色,255 = 绿色)
  • 蓝色:1 字节(0 = 黑色,255 = 蓝色)

条目的数量由块长度确定。块长度不能被 3 整除是一个错误。
该块必须出现在颜色类型 3 中,并且可以出现在颜色类型 2 和 6 中,它不能出现在颜色类型 0 和 4 中。
如果出现此块,则它必须位于第一个IDAT块之前。不得有超过 1 个PLTE块。

IDAT块

IDAT块包含实际的图像数据

IEND块

IEND块必须出现在最后。它标志着 PNG 数据流的结束。该块的数据字段为空。

其他辅助块

所有辅助块都是可选的,因为编码器不需要编写它们并且解码器可以忽略它们。
比如:tRNS、gAMA、cHRM、sRGB、iCCP、iTXt、tEXt、zTXt、bKGD、pHYs、sBIT、sPLT、hIST、tIME等都是辅助块

zip

参考 维基百科 zip文件格式

文件结构

概述


格式预览


zip文件尾存在中央目录区,每个条目以 50 4B 01 02开头
图中共有两个条目,对应两个文件a.txt,b.txt

每个中央目录区条目对应着文件区的一个文件或目录,中央目录存放着偏移量,可以用来寻找对应的文件区文件
这意味着中央目录中文件条目的顺序不需要与文件区中文件条目的顺序一致


每个文件区文件以 50 4B 03 04 开头,所以看起来zip文件前4个字节为 50 4B 03 04


zip文件结尾段以 50 4B 05 06开头

本地文件头

额外字段包含各种可选数据,例如特定于操作系统的属性。
这个压缩包额外字段长度为零,所以没有额外字段区,直接就到了压缩后数据区

中央目录区文件文件头

zip文件伪加密

zip文件伪加密通常是通过通用标志位实现的

上面这张是未加密的zip文件


上面这张是正常加密过的zip文件


上面这张是伪加密的zip文件
中央目录区通用标志位的1可更改为任意奇数,即可实现伪加密,改回偶数即可去除伪加密

posted @   zzkkk1h  阅读(486)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示