我对图像隐写术感兴趣已经有一段时间了,过去也使用过Steghide(Linux)。我想知道是否有一个(合理)简单,尽管粗略的计算器或计算可用于确定给定嵌入文件的封面文件需要多大。(抱歉,我在这里使用的是剑士术语)。
例如,假设我有一个 1024x768 的图像(嵌入文件),我想尝试嵌入到文件(steg 文件)中,我必须找到一个足够大的图像(封面文件),以便 steghide 能够做到这一点。
我从
- 1024 x 768 = 1497088 像素 (~300KB)
- 需要 RGB 值的 1497088 像素(每种颜色 8 位?)= 2.48E13 位
- 2.48E13 位 = 24GB
。正如你所看到的,从这一点开始它变得有点粗糙,因为(通过一些测试)我显然能够将 316KB 的图像隐藏到一个文件中,该文件是 24GB 文件大小的 1%,所以我的计算已经很远了。
所以想知道是否有一个"一般"的经验法则可以用来估计预期图像所需的文件大小? 我很欣赏这取决于许多其他因素(封面图像和嵌入图像的颜色深度等)......
首先,每种算法都以不同的方式隐藏信息,因此没有"隐写术"容量的通用公式。
在您的情况下,您似乎以每像素 1 位的嵌入容量在封面文件的像素中隐藏了整个图像。您必须隐藏的总位数为 1024x768x24 = 18874368。我不知道你是如何得到1e13数量级的结果的,但这就是你出错的地方。顺便说一下,24 是假设 RGB 图像的结果,其中每个像素有 3 个颜色平面,每个颜色有 8 位。
假设封面和秘密图像具有相同数量的彩色平面,则封面图像必须至少比秘密图像大 8 倍。因此,对于 1024x768 的秘密尺寸,封面可以是 4096x1536、8192x768 或 1024x6144 等。
直接嵌入像素数组就像嵌入未压缩的 bmp 文件一样。您可以通过首先将图像转换为 png 并嵌入该文件的字节流来实现相同的目的,这应该会导致较小的有效负载。如果您不介意有损压缩,Jpeg 应该会产生更小的文件。