斗哥最近又总结了一波JPG格式的图片分析,本篇内容主要讲的是基于DCT域的JPG图片隐写。想要回顾前两篇内容的小伙伴可以戳这里:CTF解题技能之图片分析(一)、CTF解题技能之图片分析(二)。
JPEG压缩原理JPEG(全称为joint Photographic Experts Group)是由联合图像专家组开发的,并且简单粗暴的使用组的名字作为该图片格式的名字。之前的文章中我们有讲过PNG图片,JPG图片和PNG图片的不同点是,JPG图片是有损压缩文件,支持多种压缩级别。在讲JPG图片隐写之前,我们先来了解一下JPG图片的压缩原理。
JPEG压缩的流程图如下,解压缩则是反过来:
![af6fb337cd97a57f5bb1561c972a4b98.png](https://img-blog.csdnimg.cn/img_convert/af6fb337cd97a57f5bb1561c972a4b98.png)
整个JPEG压缩算法中最核心的算法就是DCT,在CTF中很多的加密隐写也和DCT相关,接下来我们就来了解一下DCT。
● DCT
DCT(Discrete cosine transform),全称为离散余弦变换,类似于离散傅里叶变换,但只使用实数。在进行DCT变换前,会将图像分为8×8的像素块,然后针对8×8的像素块逐一进行DCT变换。
离散余弦变换变换计算公式:
![2c24b9d2c0008bea7a8680d5620ed1a9.png](https://img-blog.csdnimg.cn/img_convert/2c24b9d2c0008bea7a8680d5620ed1a9.png)
上述公式的M,N是指水平、垂直方向的像素值,一般为8(实验证明8×8的数据块的计算效率比较高)。8×8的像素块经过DCT操作后,就得到了8×8的变换系数矩阵。F(0,0)是直流系数(DC),是8×8像素块数据的平均值,其他的63个系数则是交流系数(AC)。